2013-08-29 23 views
0

我有一個類似於41512 的MSDate我想從中找出過去的2年。 現在我在C#中,41512日期是一個字符串。找出過去2年的MSDate

+0

轉換爲'int'並減去'2 * 365'?取決於你的*年的定義* ... –

+0

你有什麼試過?什麼是「MSDate」? 41512代表什麼?這似乎是自1900年1月1日以來的天數,自8月28日以來是1900年1月1日以來的41,512天。清晰的問題陳述和代碼樣本顯示您的工作到目前爲止有助於我們爲您提供幫助。 –

回答

4

的msDate是因爲1900-01-00天數,那麼你可以通過new DateTime(1900,01,01)並添加msDate,再服用2(1〜賬戶計算它對於00-00而不是00-01,因爲你不計算目標日本身)。更容易,FromOADate功能爲您處理這個問題。 然後你可以減去兩年來獲得新的日期。 您可以選擇使用ToOADate函數將此日期轉換回整數。

int msDate = 41512; 
//DateTime d = (new DateTime(1900, 01, 01)).AddDays(msDate - 2).AddYears(-2); 
DateTime d = DateTime.FromOADate(msDate).AddYears(-2); 
msDate = int.Parse(d.ToOADate().ToString()); 
0

您的「MSDate」是自特定時代(一個時代是日曆上的零點)以來的天數嗎?如果是這樣,你可以做這樣的事情:

public DateTime MsDateToDateTime(string msDate) 
{ 
    int daysSinceEpoch ; 
    bool parsed = int.TryParse(msDate , out daySinceEpoch) ; 
    if (!parsed) throw new ArgumentException("msDate") ; 

    Datetime value = epoch.AddDays(daysSinceEpoch) ; 
    return value ; 
} 

// our epoch is 1 January 1900 00:00:00 
private static readonly DateTime epoch = new DateTime(1900,1,1) ; 

一旦它的一個DateTime,你可以操縱它,只要你喜歡。您可以閱讀DateTime.AddYears()方法。

走另一條路:

public string DateTimeToMsDate(DateTime dt) 
{ 
    return ((int) (dt-epoch).TotalDays).ToString() ; 
}