在不同的机器C#的DateTime转换同一种文化(C# DateTime conversion sa

2019-10-18 10:12发布

如果我运行从我的测试机器意大利这个控制台应用程序:

static void Main(string[] args)
    {
        String date = DateTime.Now.ToString("yyyy-MM-dd HH:mm", new CultureInfo("it-IT"));
        Console.WriteLine(date);
        Console.ReadKey();
        CultureInfo ci = new CultureInfo("it-IT");
                Console.WriteLine("Time: " + ci.Name + " " + ci.DateTimeFormat.TimeSeparator);
                Console.WriteLine("Date: " + ci.Name + " " + ci.DateTimeFormat.DateSeparator);
        Console.ReadKey();
    }

显示:

2013年7月25日15:40时间:它-IT:日期:它-IT /

但如果我从我的美国服务器上运行的代码:

2013年7月25日15.40时间:它-IT。 日期:它-IT /

为什么不同的格式分离器,用于在部分时间? 正确的意大利必须是:

Answer 1:

你发现自己的Windows版本之间改变了意大利时间分隔符的数据(冒号是更先进的最新版本)。 这是我们正在改进我们的数据的预期。 如果你发现,因为机器之间传输数据的这一点,你应该使用标准不变的格式(如ISO 8601),将幸免于数据的变化。



Answer 2:

我正好碰上了这个问题。 有时我认为这个问题是因为有一个用户覆盖。

我建议使用加载的CultureInfo:

CultureInfo的CI =新的CultureInfo( “IT-IT”,假);

指定false作为useUserOverride参数力绕过任何用户设置。

在任何情况下,有Win8的和Win7之间的变化。 运行下面的代码(.NET 4.5):

CultureInfo ci = new CultureInfo("it-IT", false);

String date = DateTime.Now.ToString(ci);
Console.WriteLine(date);
Console.WriteLine("Time Separator: " + ci.DateTimeFormat.TimeSeparator);
Console.WriteLine("Date Separaotr: " + ci.DateTimeFormat.DateSeparator);
Console.ReadKey();

在Win 7产品:

29/10/2013 14:12:33
Time Separator: :
Date Separaotr: /

而它运行在Win 8产品:

29/10/2013 15.08.43
Time Separator: .
Date Separaotr: /


Answer 3:

更换

    ci.DateTimeFormat.TimeSeparator

    DateTimeFormatInfo.CurrentInfo.TimeSeparator;


文章来源: C# DateTime conversion same culture on different machines