Microsoft Azure上的C#DateTime的时间分隔符错误

Microsoft Azure上的C#DateTime的时间分隔符错误,c#,azure,datetime-format,azure-web-app-service,C#,Azure,Datetime Format,Azure Web App Service,如果我在azure网站上使用这行代码 DateTime.Now.ToString(new System.Globalization.CultureInfo("it-IT")) 页面打印 13/02/2014 12.08.45 但是时间分隔符是错误的,应该是错误的 13/02/2014 12:08:45 我是做错了什么还是一个azure bug 编辑 我运行Jon Skeet建议的测试程序,这些是结果 PS D:\desktop> .\test 13/02/2014 12:50:32

如果我在azure网站上使用这行代码

DateTime.Now.ToString(new System.Globalization.CultureInfo("it-IT"))
页面打印

13/02/2014 12.08.45
但是时间分隔符是错误的,应该是错误的

13/02/2014 12:08:45
我是做错了什么还是一个azure bug

编辑

我运行Jon Skeet建议的测试程序,这些是结果

PS D:\desktop> .\test
13/02/2014 12:50:32
Runtime: 2.0.50727.5472
PS D:\desktop> .\test
13/02/2014 12:50:47
Runtime: 4.0.30319.18408
不,它不是虫子

因为
it
文化是
而不是

CultureInfo c = CultureInfo.CreateSpecificCulture("it-IT");
Console.WriteLine(c.DateTimeFormat.TimeSeparator); //Prints .
编辑:请稍等。。这里有些棘手的事情

我想是因为在我的机器上,我用.NET3.5运行它,这就是为什么它打印
,而不是

CultureInfo c = CultureInfo.CreateSpecificCulture("it-IT");
Console.WriteLine(c.DateTimeFormat.TimeSeparator); //Prints .
如果你可以强制你的Azure服务使用.NET 4+,你会得到
而不是
不,这不是一个bug

因为
it
文化是
而不是

CultureInfo c = CultureInfo.CreateSpecificCulture("it-IT");
Console.WriteLine(c.DateTimeFormat.TimeSeparator); //Prints .
编辑:请稍等。。这里有些棘手的事情

我想是因为在我的机器上,我用.NET3.5运行它,这就是为什么它打印
,而不是

CultureInfo c = CultureInfo.CreateSpecificCulture("it-IT");
Console.WriteLine(c.DateTimeFormat.TimeSeparator); //Prints .

如果你可以强制你的Azure服务使用.NET 4+,你会得到
,而不是
,我相信这与所使用的CLR版本有关。在v4之前的CLR上,所使用的区域性信息的时间分隔符为
。在CLR v4+上,它是
。我不知道为什么。。。据推测,CLR v4+正在从不同(较新?)位置读取区域信息。(我怀疑基本上是因为使用了CLR版本。)

无论如何,我怀疑如果你能强迫你的Azure服务使用.NET4,那就没问题了。我怀疑您会发现它目前正在使用.NET3.5

以以下代码为例:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        CultureInfo culture = new CultureInfo("it-IT");
        Console.WriteLine(DateTime.Now.ToString(culture));
        Console.WriteLine("Runtime: {0}", Environment.Version);
    }
}
使用C#2编译器编译:

c:\Windows\Microsoft.NET\Framework\v2.0.50727\csc Test.cs
并创建Test.exe.config文件:

<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727"/>
      <supportedRuntime version="v4.0"/>
   </startup>
</configuration>


每次注释掉其中一个
supportedRuntime
元素以查看差异。

我认为这与所使用的CLR版本有关。在v4之前的CLR上,所使用的区域性信息的时间分隔符为
。在CLR v4+上,它是
。我不知道为什么。。。据推测,CLR v4+正在从不同(较新?)位置读取区域信息。(我怀疑基本上是因为使用了CLR版本。)

无论如何,我怀疑如果你能强迫你的Azure服务使用.NET4,那就没问题了。我怀疑您会发现它目前正在使用.NET3.5

以以下代码为例:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        CultureInfo culture = new CultureInfo("it-IT");
        Console.WriteLine(DateTime.Now.ToString(culture));
        Console.WriteLine("Runtime: {0}", Environment.Version);
    }
}
使用C#2编译器编译:

c:\Windows\Microsoft.NET\Framework\v2.0.50727\csc Test.cs
并创建Test.exe.config文件:

<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727"/>
      <supportedRuntime version="v4.0"/>
   </startup>
</configuration>

每次注释掉其中一个
supportedRuntime
元素以查看差异。

实际上这是Windows 8(Server 2012)的问题。在Windows 8中,it文化被更新为使用
,而不是像在Windows 7中那样使用
。在8.1中,在收到客户的一些反馈后,它再次更新为

如果您使用的是Windows 7或8.1计算机,而不是Windows 8计算机,则可以在控制面板中看到这一点

Azure网站当前正在使用Windows 8(Server 2012)虚拟机

Windows 7和8.1

视窗8

有关解决方法,请查看肖恩·斯蒂尔的回复

实际上这是Windows 8(Server 2012)的问题。在Windows 8中,it文化被更新为使用
,而不是像在Windows 7中那样使用
。在8.1中,在收到客户的一些反馈后,它再次更新为

如果您使用的是Windows 7或8.1计算机,而不是Windows 8计算机,则可以在控制面板中看到这一点

Azure网站当前正在使用Windows 8(Server 2012)虚拟机

Windows 7和8.1

视窗8

有关解决方法,请查看肖恩·斯蒂尔的回复

不在我的机器上它不:)不在我的机器上它不:)谢谢您的快速回复!在我的网站上的azure面板中,我已经在使用.NET FRAMEWORK V4.5版,但我在我的web.config中添加了这一行,但仍然没有任何内容。@Sig.Tolleranza:你是什么意思?@Sig.Tolleranza:你能根据我的编辑记录CLR版本吗?也许Azure正在使用某些区域设置的旧版本?这看起来很奇怪……是的,当然;我已经删除了web.config行,在azure上,我得到了这个运行时:4.0.30319。19408@Sig.Tolleranza:对。在这种情况下,我不明白:(感谢您的快速回复!在我的网站上的azure面板中,我已经在使用.NET FRAMEWORK V4.5版了,但是我已经在我的web.config中添加了这一行,但仍然没有任何内容。@Sig.Tolleranza:你是什么意思?@Sig.Tolleranza:你能按照我的编辑记录CLR版本吗?也许azure使用的是一些区域设置的旧版本?这会让我感到惊讶。)嗯,很奇怪……是的,当然;我删除了web.config行,在azure上,我得到了这个运行时:4.0.30319。19408@Sig.Tolleranza:是的。那样的话,我不明白:(