2010-06-17 105 views
2

我使用.NET中的MPXJ庫解析MS項目(MPP)的文件,它的偉大的工作。我有一個問題是試圖翻譯任務的開始和完成日期爲.NET日期時間與我的數據模型來使用。MPXJ在.NET中的Java日期轉換爲.NET日期時間

我經歷的所有任務,並呼籲task.getFinish()和task.getStart(),這兩個返回javva.util.Date對象。當我使用task.getFinish()。getYear(),task.getFinish()。getMonth()等建立一個新的DateTime對象時,它警告我它們已經過時了。

什麼是擺脫MPXJ開始和結束日期爲.NET DateTime對象的最佳方式?

謝謝。

回答

3

我也使用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日期變量。我使用可空類型,因爲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 

如果您不需要所有部件,或者您想包含時區信息,則可以使用不同的日期格式字符串。以下是format string choices for Java的列表。

更新

另一個,也許這樣做(除了字符串解析)的更好的性能,方法如下:

Dim startDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(d.getTime()).ToLocalTime(); 
3

我知道我兩年多晚就這一個,但萬一它對你或其他人閱讀這個線程有用,下面是一個簡單的小擴展方法,我把它們放在一起(用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)); 
}