Microsoft Azure上的C#DateTime的时间分隔符错误
如果我在azure网站上使用这行代码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
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:是的。那样的话,我不明白:(