【问题标题】:Wrong time separator for a C# DateTime on Microsoft AzureMicrosoft Azure 上 C# DateTime 的时间分隔符错误
【发布时间】:2014-02-13 11:11:05
【问题描述】:

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

DateTime.Now.ToString(new System.Globalization.CultureInfo("it-IT"))

页面打印

13/02/2014 12.08.45

但是时间分隔符不对,应该是

13/02/2014 12:08:45

我做错了什么还是一个天蓝色的错误?

编辑

我运行 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

【问题讨论】:

    标签: c# azure datetime-format azure-web-app-service


    【解决方案1】:

    我相信这与所使用的 CLR 版本有关。在 v4 之前的 CLR 上,所使用的区域性信息确实具有. 的时间分隔符。在 CLR v4+ 上,它是 :。我不知道为什么……大概 CLR v4+ 正在从不同的(较新的?)位置读取区域信息。 (我怀疑这基本上取决于所使用的 CLR 版本。)

    无论如何,我怀疑如果您可以强制您的 Azure 服务使用 .NET 4,那就没问题了。我怀疑你会发现它目前正在使用 .NET 3.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 元素以查看差异。

    【讨论】:

    • 感谢您的快速回复!在我的 azure 面板中,在我的网站上,我已经在使用 .NET FRAMEWORK VERSION V 4.5,但是我在 web.config 中添加了该行,但仍然没有 .
    • @Sig.Tolleranza:你什么意思?
    • @Sig.Tolleranza:根据我的编辑,您能记录 CLR 版本吗?也许 Azure 正在使用某些区域设置的旧版本?这看起来很奇怪......
    • 是的,当然;我删除了 web.config 行,在天蓝色上,我得到了这个运行时:4.0.30319.19408
    • @Sig.Tolleranza:对。在那种情况下,我不明白:(
    【解决方案2】:

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

    如果您使用的是 Windows 7 或 8.1 机器与 Windows 8 机器,您可以在控制面板中看到这一点。 Culture data shouldn't be considered stable (except for Invariant)

    Azure 网站目前使用的是 Windows 8 (Server 2012) 虚拟机

    Windows 7 和 8.1

    Windows 8

    有关解决方法,请查看Shawn Steele 在此处回复 http://social.msdn.microsoft.com/Forums/en-US/bf5fa2c1-b6ce-4e4e-b9dd-17191afca4be/web-services-culture?forum=windowsazurewebsitespreview&prof=required

    【讨论】:

      【解决方案3】:

      不,这不是错误。

      因为it-IT 文化的TimeSeperator. 而不是:

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

      编辑:等一下..这里有些棘手..

      我认为 Jon is right 因为在我的机器上我使用 .NET 3.5 运行它,这就是为什么它打印 . 而不是 :

      如果您可以强制您的 Azure 服务使用 .NET 4+,您将获得 : 而不是 .

      【讨论】:

      • 不在我的机器上它没有:)
      猜你喜欢
      • 1970-01-01
      • 2017-12-19
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      相关资源
      最近更新 更多