C# 写入CSV时日期格式不一致
我面临一个非常奇怪的问题。我正在写入CSV文件,如下所示:C# 写入CSV时日期格式不一致,c#,.net,datetime,localization,date-formatting,C#,.net,Datetime,Localization,Date Formatting,我面临一个非常奇怪的问题。我正在写入CSV文件,如下所示: sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}"); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 过帐日期是DateTime对象,过期日期是
sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
过帐日期是DateTime
对象,过期日期是DateTime?
对象
然而,当我在德国的生产服务器上运行这个时,它打印的日期格式非常不一致。有时我会有这样的日期格式(欧式):
有时我会有这样的日期格式(美国风格):
过账日期和到期日期是完全独立的.NET对象,但每一行都是一致的,即如果一列为欧洲格式,那么另一列也将是一致的
我试着这样设置文化:
sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
但这似乎没有什么不同
当我在德国的服务器上运行console应用程序时,就会发生这种情况
这可能是什么原因造成的?是否有一种方法可以修复它,而不必每次写入日期时都显式调用格式为的
ToString
?显式设置格式,例如:
sw.WriteLine($"{posting.publishedOn.ToString("MM/dd/yyyy hh:mm tt")},{posting.ExpirationDate?.ToString("MM/dd/yyyy hh:mm tt")??""}");
编辑:刚刚意识到你明确地说你不想要这个解决方案。我将留下我的答案,以防其他人发现您的问题,
ToString
是一个合适的解决方案。我相信您只需将特定的文化设置为:
CultureInfo.CurrentUICulture=CultureInfo.CreateSpecificCulture(“en-US”)代码>您是否绝对确定序列化总是在设置区域性的同一线程中发生
因为如果不是,那可能就是问题所在
为了调试它,请在序列化代码之前立即设置当前线程区域性,并检查问题是否仍然发生,即
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");
调用格式化的ToString有什么问题?@Papazzo我在我的应用程序中经常这样做-这将是一个麻烦,因为字符串插值可以接受格式化字符串:$“{someDate:MM/dd/yyyy}”