写入CSV时的日期格式不一致

时间:2018-09-17 21:09:04

标签: c# .net datetime localization date-formatting

我面临一个非常奇怪的问题。我正在这样写CSV文件:

sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");

“发布日期”是DateTime对象,而“到期日期”是DateTime?对象。

但是,当我在德国的生产服务器上运行此文件时,它打印出哪种日期格式却非常不一致。有时我的日期格式如下(欧洲风格):

Posting Date,Expiration Date
06.08.2018 11:49,08.07.2018 11:49

有时我的日期格式如下(美国风格):

Posting Date,Expiration Date
8/15/2018 7:56:12 AM,10/14/2018 7:56:12 AM

Posting Date和Expiration Date是完全独立的.NET对象,但每一行都是一致的-即,如果一列为欧洲格式,则另一列也将相同。

我尝试过这样设置文化:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

但似乎没有什么改变。

当我在德国的服务器上运行控制台应用程序时,就会发生这种情况。

可能是什么原因造成的?有没有一种解决方法,而不必每次我写日期时都使用格式显式调用ToString

3 个答案:

答案 0 :(得分:2)

显式设置格式,例如:

sw.WriteLine($"{posting.publishedOn.ToString("MM/dd/yyyy hh:mm tt")},{posting.ExpirationDate?.ToString("MM/dd/yyyy hh:mm tt")??""}");

编辑:刚刚意识到您明确表示您不需要此解决方案。如果其他人找到您的问题,ToString是一个合适的解决方案,我将保留我的答案。

答案 1 :(得分:1)

我相信您需要像这样设置特定的文化:

CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");

答案 2 :(得分:1)

您绝对确定序列化总是在设置了区域性的同一线程中发生吗?

因为不是,那可能就是问题所在。

仅需调试,请在序列化代码之前立即设置当前线程区域性,并检查问题是否仍然存在,即

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");
相关问题