2013-11-20 51 views
1

为什么日期时间是古怪

w.WriteLine(Program.RegisterList[i].DateTime); 

写入:11/20/2013 01:46:31 PM

w.WriteLine(Convert.ToDateTime(Program.RegisterList[i].DateTime, CultureInfo.InvariantCulture).ToString()); 

写入20/11/2013 1:46:31 PM

?是不是不变的文化应该使它MM/DD/YY?我想用DD/MM/YY格式的日期单据来使用不变的文化方法。

谢谢!编号:Program.RegisterList[i].DateTime是一个字符串。

EDIT2:

MessageBox.Show("11/20/2013 01:46:31 PM"); 
MessageBox.Show(Convert.ToDateTime("11/20/2013 01:46:31 PM", CultureInfo.InvariantCulture).ToString()); 
+0

'Program.RegisterList [i] .DateTime'的类型是什么?你能制作一个简短但完整的程序来证明问题吗? –

+0

当然,我会把它放在一起。一秒 – Nathan

+0

@JonSkeet我已将它编辑到我的问题 – Nathan

回答

10
w.WriteLine(Convert.ToDateTime(Program.RegisterList[i].DateTime, CultureInfo.InvariantCulture).ToString()); 

你通过编写你不能理解的代码来困惑自己。一个鸣喇叭声明的简单改写:

string s = Program.RegisterList[i].DateTime; 
DateTime dt = Convert.ToDateTime(s, CultureInfo.InvariantCulture); 
w.WriteLine(dt); 

现在应该很明显,你使用InvariantCulture的显示日期是,它使用默认文化。你的机器上哪一天首先放置。

总是写出可读的代码,它是而不是较慢。

+4

“总是编写可读代码,它不会慢。” +11111111111 ... –

+0

@HansPassant啊,我误解了Invarient文化做了什么。我会如何将日期时间更改为“MM/DD/YY HH MM SS AM/PM”格式? – Nathan

+0

如果您想要特定格式,可以使用自定义格式字符串:http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx – Steve

2

CultureInvariant只保证格式不会跨文化改变 - 它不应该被用来显示数据,仅留存数据。如果您关心字符串的显示方式,则应使用显示您想要的特定文化。 More from MSDN

话虽如此,我不确定您的意思是“日期滑落”,采用不同的格式。你在阅读日期列表,有些格式不同?如果是这样,恐怕CultureInvariant不是答案。