这种自定义DateTime格式是否会在其他文化中中断?

时间:2009-02-09 01:51:19

标签: c# datetime formatting culture

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:4)

  

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

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

如果您 希望在客户端应用中使用区域设置友好时间,那么使用默认的长日期格式将为您提供最流畅的结果。在我的语言环境中,我不希望看到12小时或一天前的月份,但我肯定会理解它。

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

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

答案 1 :(得分:2)

我更喜欢ISO 8601格式(并且没有“T”):您不必根据谁在阅读您的数据来兼顾不同的表示形式。 更少的代码,更少的错误。

我一直在寻找原本用英文写成的文件,这些文件被“翻译”但是日期保持“原样”,因此完全错误。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

代码

        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 AM
guovvamanu 09,2009 04:21
goevten 09,2009 04:21
veljaca 09,2009 04:21
kuovamaanu 09,2009 04:21
Hatun puquy 09,2009 04:21 a.m.
guovvamanu 09,2009 04:21
ta?lvvmannu 09,2009 04:21
Chwefror 09,2009 04:21 a.m.
februar 09,2009 04:21
guovvamano 09,2009 04:21
Hui-tanguru 09,2009 04:21 a.m.
Hatun puquy 09,2009 04:21
februar 09,2009 04:21

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