MPXJ в .NET Преобразование Java Date до .NET DateTime
-
27-09-2019 - |
Вопрос
Я использую библиотеку MPXJ в .NET для Parsing файлов MS Project (MPP), и он отлично работает. Один из проблем, который я пытаюсь перевести начало задачи и дату окончания .NET DateTime для использования с моими моделями данных.
Я прохожу все задачи и вызывающую задачу. Getfinish () и Task.getStart (), что оба возвращают объекты javva.util.date.
Когда я использую task.getfinish (). Getyear (), task.getfinish (). GetMonth () и т. Д. Для создания нового объекта DateTime оно предупреждает меня, что они устарели.
Какой лучший способ получить даты начала и заканчивания MPXJ в объект .NET DateTime?
Спасибо.
Решение
Я также использую MPXJ и имел ту же проблему. Есть пара способов справиться с этим. Я буду набросать два способа ниже (я использовал оба, так и не уверен, что лучше):
Dim cal As New GregorianCalendar()
cal.setTime(task.getStart())
'have to add one to month value because it is 0 - 11
Dim startDate as New Date(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND))
Это способ, которым они хотят, чтобы вы сделали это, когда говорят, что .getyear устарел.
Другой способ, которым я сделал это, - это преобразовать дату Java на строку, а затем использовать дату .parne, чтобы получить его в переменной даты .NET. Я использую Nullable тип, потому что дата Java может быть нулевым.
Dim d as java.util.Date = t.getStart()
Dim startDate As New Nullable(Of Date)
If d IsNot Nothing Then
Dim dateString As String = New java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d)
startDate = Date.Parse(dateString)
End If
Вы можете использовать другую строку формата даты, если вам не нужны все детали, или если вы хотите включить информацию о часовой поясе. Вот список Формат строковых выборов для Java.
Обновлять
Другой, возможно, более исполнительный способ выполнения этого (чем на строговом анализе) является следующим:
Dim startDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(d.getTime()).ToLocalTime();
Другие советы
Я знаю, что я в течение двух лет после этого, но в случае, если это полезно для вас или кто-то еще читал эту тему, вот простой маленький метод расширения, который я бросил вместе (в C #), чтобы обработать это преобразование:
internal static DateTime ToDateTime(this java.util.Date javaDate)
{
var cal = java.util.Calendar.getInstance();
cal.setTime(javaDate);
// note that the Month component of java.util.Date
// from 0-11 (i.e. Jan == 0)
return new DateTime(cal.get(java.util.Calendar.YEAR),
cal.get(java.util.Calendar.MONTH) + 1,
cal.get(java.util.Calendar.DAY_OF_MONTH),
cal.get(java.util.Calendar.HOUR_OF_DAY),
cal.get(java.util.Calendar.MINUTE),
cal.get(java.util.Calendar.SECOND));
}