2

我有这个代码来设置文化

        public static CultureInfo GetRegionDefaultCulture(int regionId)
        {   
            // removed code to shorten....
            return CultureInfo.CreateSpecificCulture("en-au");

        }

在我的测试示例后面的代码中使用它

        Thread.CurrentThread.CurrentCulture = 
               CultureHelper.GetRegionDefaultCulture(regionId);

在我的测试示例后面的 aspx 代码中使用它

        DateTime dtNow = DateTime.Now;
        Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt"));

输出

09 Nov 2010 04:42 PM

如果我更新代码以使用这些文化中的任何一种,我也会在输出中正确获得 AM/PM

en-PH
en-GB
en-US
en-JM

如果我更新要使用的代码

en-IE

输出是

09 Nov 2010 04:44 

我错过了什么吗?为什么 en-IE 的行为不同?

答案 来自@Jordans 的答案。

添加这段代码有效。

            DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
            info.AMDesignator = "AM";
            info.PMDesignator = "PM"; 
4

3 回答 3

4

显然,“en-IE”的区域设置默认使用 24 小时制,因此不需要 AM/PM。

于 2010-11-09T05:51:22.133 回答
2

根据文档,如果文化不使用 AM/PM,则不会返回任何内容tt

对于不使用 AM 指示符的区域性,此属性返回一个空字符串。

我找不到任何关于哪些文化有 AM 指示符的文档。文化信息是通过我找不到源的本机方法检索的。您可以使用以下代码生成自己的列表:

CultureInfo.GetCultures(CultureTypes.AllCultures)
  .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator)));
于 2010-11-09T05:55:56.377 回答
0

这是一种文化行为。它使用 Windows 文化设置来操纵其细节。如果您根据需要设置语言环境信息,则应设置 AM/PM 指示符。这就是您使用@Jordans 代码所做的。

但这里的问题是语言。“AM”和“PM”适用于任何语言环境。但是需要发生的是'AM'和'PM'应该根据语言环境而改变。

EG : 如果您的区域信息是“zh-TW”,结果将是下午 04:16:08。

因此,使用 24 小时制是一种解决方案。但我们知道没有 AM/PM EG 3.15 PM = 15:15 这是一个很好的解决方案,因为这是一个搁浅的。

提供的第二个解决方案就是这个。更改服务器的语言环境/文化设置。请参考https://msdn.microsoft.com/en-us/library/bb688125.aspx

希望我的评论能帮到你。

于 2016-08-11T03:49:24.663 回答