C#DateTime在不同的机器上转换相同的文化

时间:2013-07-25 13:43:23

标签: datetime cultureinfo

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

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-07-25 15:40时间:it-IT:日期:it-It /

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

  

2013-07-25 15.40时间:它 - IT。日期:it-It /

为什么时间部分有不同的格式分隔符?意大利语的正确必须是:

3 个答案:

答案 0 :(得分:2)

您自己发现意大利语的时间分隔符数据在Windows版本之间发生了变化(冒号是更新版本)。这是预期的,因为我们正在改进我们的数据。如果您因为在机器之间传输数据而发现这种情况,那么您应该使用标准的不变格式(如ISO 8601),这些格式将不受数据更改的影响。

答案 1 :(得分:1)

我遇到了这个问题。 有时我认为问题是因为有用户覆盖。

我建议使用:

加载CultureInfo
  

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

指定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: /

答案 2 :(得分:-1)

替换

    ci.DateTimeFormat.TimeSeparator

    DateTimeFormatInfo.CurrentInfo.TimeSeparator;