我也在使用 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 Date 变量。我使用可为空的类型,因为 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();