Я также использую 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 в строку и затем использовать Date.Parse, чтобы получить ее в переменную даты .NET. Я использую тип NULL, потому что дата 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();