我遇到了一个让我发疯的问题。在我的应用程序(ASP.NET MVC2 /.NET4)中,我只是运行它:
DateTime.Now.ToShortTimeString()
我看到的所有示例都表明我应该得到类似:12:32 PM
的内容,但是如果没有AM / PM我就会得到12:32
。
我启动了LinqPad 4,看看我是否可以复制它。相反,它会正确返回12:32 PM
。
到底是什么?
答案 0 :(得分:10)
您也可以尝试使用custom format来避免文化特定的混淆:
DateTime.Now.ToString("hh:mm tt")
答案 1 :(得分:4)
KBrimington看起来是正确的:
ToShortTimeString方法返回的字符串对文化敏感。它反映了当前文化的DateTimeFormatInfo对象定义的模式。例如,对于en-US文化,标准的短时间模式是“h:mm tt”;对于de-DE文化,它是“HH:mm”;对于ja-JP文化,它是“H:mm”。特定计算机上的特定格式字符串也可以自定义,以便它与标准的短时格式字符串不同。
来自MSDN
答案 2 :(得分:2)
如果您不想为整个线程/应用程序弄乱文化,请尝试以下方法:
CultureInfo ci = new CultureInfo("en-US");
string formatedDate = DateTime.Now.ToString("t", ci);
您可以找到DateTime格式字符串列表here。
答案 3 :(得分:1)
是的,这取决于你的Locale。您的申请中System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern
的价值是多少?
请参阅MSDN Link
答案 4 :(得分:1)
您可以设置线程的文化信息,然后ToShortTimeString()方法将使用它。但要明白这会影响在该线程中运行的所有代码。
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
答案 5 :(得分:1)
该功能使用用户默认模式。可以在“控制”面板中更改它们。查看“地区和语言”设置中的第一个标签。将短时间模式更改为类似'h:mm tt'的模式,然后就完成了。
答案 6 :(得分:0)
这可能还需要CultureInfo.InvariantCulture
例如DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture)