Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么en IE文化没有给我AM PM格式的字符串?_Asp.net_Datetime Format - Fatal编程技术网

Asp.net 为什么en IE文化没有给我AM PM格式的字符串?

Asp.net 为什么en IE文化没有给我AM PM格式的字符串?,asp.net,datetime-format,Asp.net,Datetime Format,我有这个代码来设置文化 public static CultureInfo GetRegionDefaultCulture(int regionId) { // removed code to shorten.... return CultureInfo.CreateSpecificCulture("en-au"); } 在我的测试示例的代码中使用它 Thread.Curre

我有这个代码来设置文化

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

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

        Thread.CurrentThread.CurrentCulture = 
               CultureHelper.GetRegionDefaultCulture(regionId);
        DateTime dtNow = DateTime.Now;
        Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt"));
在我的测试示例后面的aspx代码中使用这个

        Thread.CurrentThread.CurrentCulture = 
               CultureHelper.GetRegionDefaultCulture(regionId);
        DateTime dtNow = DateTime.Now;
        Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt"));
如果我更新代码以使用这些区域性中的任何一个,我也会正确地在输出中获得AM/PM

en-PH
en-GB
en-US
en-JM
如果我更新代码以使用

en-IE
输出是

09 Nov 2010 04:44 
我错过什么了吗?为什么en-IE的行为有所不同

回答 从@jordan的回答中获得

添加这段代码是有效的

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

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

根据,如果区域性不使用AM/PM,则tt将不会返回任何内容

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

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

CultureInfo.GetCultures(CultureTypes.AllCultures)
  .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator)));

这是一种文化行为。它使用windows区域性设置来处理其详细信息。如果您想设置区域设置信息,您应该设置AM/PM指示符。 这就是您使用@Jordans代码所做的

但这里的问题是语言。”“AM”和“PM”适用于任何地区。但是需要做的是“AM”和“PM”应该根据现场情况而改变

例如:如果您的区域设置信息是“zh TW”,则结果将是下午 04:16:08

因此,使用24小时制是一种解决方案。但据我们所知,没有上午/下午 例如下午3:15=15:15 这是一个很好的解决方案,因为这是一个搁浅的问题

第二个解决方案就是这样。 更改服务器的区域设置/文化设置。 请参阅


希望我的评论能对你有所帮助。

你从哪里获得这些信息?问题评论中的维基百科链接可能是一个很好的资源。区域设置非常松散。无论是谁为en IE实施了这些标准,都是基于一个国家常见惯例的一些假设。显然,iRend倾向于使用24小时时钟而不是12小时时钟,所以这就是该区域设置的实现方式。DateTime.Now还提供了带有en GB的24小时格式。。。但是格式给了我AM/PMstill@Rob.Oakshott您还可以调用
GetLocaleInfo(LOCALE\u STIMEFORMAT)
,注意它返回
HH:mm:ss
(大写的HH表示24小时格式)。其他地区可能返回
hh:mm:ss tt
(小写的hh表示12小时格式,tt是AM/PM的占位符)。Windows 7配置为不返回
en GB
区域设置的tt。请注意:国际化意味着不总是获得相同的输出。谢谢,我想这就是答案。。。如果我能找到确认哪些文化中有AM指示符的文档,那么这将确认。。。到目前为止,我有点不走运。