2011-11-29 90 views
2

有沒有人可以告訴我這個'1110620'是什麼類型的日期格式?我怎樣才能把它轉換成'yyyy-MM-dd'格式。任何幫助,高度讚賞。謝謝!c#中轉換的日期格式

+3

顯然這是六月二十日,公元111 –

+0

你確定這不是'110620'嗎? – Marco

+0

我確定它是'1110620' –

回答

0

上述格式似乎是 - yyyMMdd。你可以編寫c#方法來相應地轉換它。有關更多詳細信息,請參閱MSDN

1

這應該工作:

string dt = "1110620"; 
DateTime dt = DateTime.ParseExact(dt, "yyyMMdd", 
            CultureInfo.CultureInvariant); 

,或者你可以嘗試(不優雅,但工程)

 int start = dt.Length - 4; 
     DateTime d = new DateTime(
      int.Parse(dt.Substring(0, start)), 
      int.Parse(dt.Substring(start, 2)), 
      int.Parse(dt.Substring(2 + start, 2))); 
+0

@亨克:你有沒有其他的非玩笑想法代表什麼格式? – abatishchev

+0

@HenkHolterman:我認爲OP的日期有誤......但他確認這是正確的。我不知道我的回答是OP在尋找什麼......真的,不知道。 :) – Marco

+0

@abatishchev:如果是Julian日數,則意味着1673年9月17日。 –

2
DateTime d; 
if (DateTime.TryParse("1110620", CultureInfo.InvariantCulture, DateTimeStyles.None, out d)) 
    string r = d.ToString("yyyy-MM-dd"); 
else 
    throw new Exception(); 
+0

好的解決方案,檢查可能的錯誤。 Upvoted! :) – Marco

+0

但爲什麼InvariantCulture的假設?你應該循環所有的文化。 –

+0

@亨克:什麼?我相信沒有哪種文化能夠解析它,如果不變則不會。 – abatishchev

0

我的猜測是,第3位是兩位數的延伸年。其中100對應於2000年。

因此格式本來是yyMMdd和或或許是(year-1900)*10000+month*100+day,它在邏輯上延伸到2000年後的前幾年,前綴爲1。這也保留了整數排序順序。

因此,要分析它你可以:

day=input%100; 
month=input/100%100; 
year=input/10000+1900; 

有了這個公式1110620相當於2011-06-20

但是,除非你能解釋一下你的例子應該是什麼意思,這只是猜測。


我的第一個猜測是,這可能是因爲某個日期天,但這將放在原點周圍1000BC,這是不可能的。