代码之家  ›  专栏  ›  技术社区  ›  Kevin Babcock

此自定义DateTime格式在其他区域性中是否中断?

  •  0
  • Kevin Babcock  · 技术社区  · 16 年前

    在显示我的DateTime值时,我希望它们的格式如下:“2009年2月9日上午7:00”

    我正在使用以下代码,但担心日期在其他文化中可能显示不正确。有人能告诉我情况是否如此吗?如果是这样,我该如何解决?

    Date.ToString("MMMM dd, yyyy hh:mm tt");
    

    谢谢!

    4 回复  |  直到 16 年前
        1
  •  4
  •   bobince    16 年前

    我正在使用以下代码,但担心日期在其他文化中可能显示不正确。

    究竟什么是正确的?你是一个普通的客户端应用程序吗?如果是这样,您将获得本地化的月份名称。这不正确吗?这取决于你在找什么。

    如果你 如果希望在客户端应用程序中使用对语言环境友好的时间,那么使用默认的长日期格式将为您提供最平滑的结果。在我的地方,我不想看到12小时制或前天,尽管我肯定能理解。

    如果你是一个服务器端应用程序,你不想使用任何默认的本地化内容,因为区域设置将是你的服务器的,而不是你的用户的,你会遇到一个奇怪的可移植性问题。在这种情况下,您必须允许用户选择自己的区域设置,或者使用自己的日期格式函数和内置的英文月份名称。

    (或者,为了避免这个问题,没有月份名称。在这种情况下,ISO-8601格式YYYY-mm-dd HH:mm:SS将是默认选择。)

        2
  •  2
  •   siukurnin    16 年前

    我更喜欢ISO 8601格式(是的,没有“T”):你不必根据谁在读取你的数据而在不同的表示之间来回切换。 更少的代码,更少的bug。

    我一直在寻找最初用英语写的文件,这些文件被“翻译”了,但日期保持“原样”,因此变得完全错误。

    作为额外的好处,ISO格式的日期排序就像普通字符串一样!

        3
  •  1
  •   Marc Gravell    16 年前

    为什么不简单地使用用户的长日期/时间格式?

        4
  •  1
  •   Avram    16 年前

    密码

            DateTime now=DateTime.Now;
            foreach(CultureInfo inf in CultureInfo.GetCultures( CultureTypes.InstalledWin32Cultures))
            {
                Console.WriteLine(now.ToString("MMMM dd, yyyy hh:mm tt", inf.DateTimeFormat));
            }
    


    Tlhakole 09,2009 04:21上午
    郭华茂09,2009 04:21
    歌德2009年9月04:21
    维贾卡09,2009 04:21
    2009年4月9日04:21
    2009年8月9日凌晨4时21分。
    郭华茂09,2009 04:21
    2009年4月9日04:21
    Chwefror 09,2009 04:21上午。
    2009年2月9日04:21
    郭华茂09,2009 04:21
    惠堂古鲁09,2009 04:21上午。
    哈顿2009年4月9日04:21
    2009年2月9日04:21

    我的意思是,这显示了他代码中的每种文化