Вопрос

Я использую библиотеку 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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top