代码之家  ›  专栏  ›  技术社区  ›  Jeff Treuting Charlie Martin

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

  •  2
  • Jeff Treuting Charlie Martin  · 技术社区  · 14 年前

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

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

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   patmortech    13 年前

    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日期可以为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
    

    如果不需要所有部分,或者想要包含时区信息,可以使用不同的日期格式字符串。这是一份 format string choices for Java .

    更新

    Dim startDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(d.getTime()).ToLocalTime();
    
        2
  •  5
  •   Michael Petrotta user3140870    12 年前

    我知道我在这一点上已经晚了两年多,但如果这对你或其他阅读这篇文章的人有用的话,这里有一个简单的小扩展方法,我把它放在一起(用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));
    }
    
    推荐文章