代码之家  ›  专栏  ›  技术社区  ›  EJoshuaS - Stand with Ukraine

写入CSV时日期格式不一致

  •  -1
  • EJoshuaS - Stand with Ukraine  · 技术社区  · 7 年前

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

    DateTime 对象和过期日期是 DateTime? 对象。

    然而,当我在德国的生产服务器上运行这个时,它输出的日期格式非常不一致。有时我会有这样的日期格式(欧式):

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

    有时我会有这样的日期格式(美国)。S。样式):

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

    过帐日期和过期日期是完全独立的.NET对象,但每一行都是一致的,即如果一列是欧洲格式的,另一列也是。

    我试着把文化设定成这样:

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

    但似乎没什么区别。

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

    是什么原因造成的?有没有一种不必显式调用 ToString

    3 回复  |  直到 7 年前
        1
  •  1
  •   João Nogueira    7 年前

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

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    
    sw.WriteLine($"{posting.publishedOn},{posting.ExpirationDate}");
    
        2
  •  2
  •   Michael    7 年前

    明确设置格式,例如:

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

    ToString 是一个合适的解决方案。

        3
  •  1
  •   matt.dixon    7 年前

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

    推荐文章