.NET中的MPXJ将java日期转换为.NET日期时间

.NET中的MPXJ将java日期转换为.NET日期时间,.net,java-interop,mpxj,.net,Java Interop,Mpxj,我正在使用.NET中的MPXJ库解析MS Project(MPP)文件,它工作得很好。我遇到的一个问题是试图将任务开始和完成日期转换为.NET DateTime,以便与我的数据模型一起使用 我将完成所有任务并调用task.getFinish()和task.getStart(),这两个函数都返回javva.util.Date对象 当我使用task.getFinish().getYear()、task.getFinish().getMonth()等构建新的DateTime对象时,它会警告我这些对象已

我正在使用.NET中的MPXJ库解析MS Project(MPP)文件,它工作得很好。我遇到的一个问题是试图将任务开始和完成日期转换为.NET DateTime,以便与我的数据模型一起使用

我将完成所有任务并调用task.getFinish()和task.getStart(),这两个函数都返回javva.util.Date对象

当我使用task.getFinish().getYear()、task.getFinish().getMonth()等构建新的DateTime对象时,它会警告我这些对象已过时

将开始日期和完成日期从MPXJ获取到.NET DateTime对象的最佳方法是什么


谢谢。

我也在使用MPXJ,也有同样的问题。有几种方法可以解决这个问题。我将在下面概述两种方法(我已经使用了这两种方法,但不确定哪种更好):

当他们这么说的时候,他们希望你这样做。getYear已经过时了

另一种方法是将Java日期转换为字符串,然后使用date.Parse将其转换为.NET日期变量。我使用可为null的类型,因为Java日期可以为null

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
如果不需要所有部分,或者希望包含时区信息,则可以使用不同的日期格式字符串。这是一份清单

更新

另一种可能比字符串解析更有效的方法是:

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));
}
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));
}