2011-11-29 54 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,这是不可能的。