日期时间格式不正确
本文关键字:不正确 格式 时间 日期 | 更新日期: 2023-09-27 18:11:52
我正在尝试将日期格式化为此格式。01/20/2013美国东部时间下午02:30,使用
LastModified.ToString("MM/dd/yyyy HH:mmtt");
但是结果是这样的
01-20-2013 02:30PM
不知道为什么显示'-'
而不是'/'
。
此外,对于时区,似乎只有+02:00
这样的格式可用。但是我想要时区作为字符串,我找不到任何格式,我怎么能得到字符串像EDT/PST/IST等?
从MSDN页面自定义日期和时间格式字符串:
"/"自定义格式说明符表示日期分隔符,用于区分年、月和日。从当前区域性或指定区域性的DateTimeFormatInfoDateSeparator属性检索适当的本地化日期分隔符。
如果你想让它绝对使用/
,你应该或者使用不变量区域性,或者引用斜杠("MM'/'dd'/'yyyy hh':'mmtt"
)。请注意,我还引用了时间分隔符,因为这也会因文化而异。根据Arshad的回答,我也把它改成了12小时制。
当使用自定义日期/时间格式时,无论如何都应该使用不变区域性。(例如,使用英国文化以美国为中心的方式来格式化字符串似乎很奇怪——今天在英国通常表示为02/05/2013,而不是05/02/2013。)
在时区说明符方面-我不知道在日期/时间格式中使用时区缩写的任何方法。我个人建议不要使用缩写,因为它们会产生歧义和混淆。我看不到TimeZoneInfo
中的任何内容,甚至可以让您手动添加该信息。
(在Noda Time中,我们可能会支持用缩写格式化,但可能不会支持解析,正是因为歧义。)
我发现了一个错误,HH
表示24小时制格式的时间。你可以试试
string date = "01/20/2013 02:30PM";
DateTime dtTime;
if (DateTime.TryParseExact(date, "MM/dd/yyyy hh:mmtt",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out dtTime))
{
Console.WriteLine(dtTime);
}
DateTime的格式化受区域性和格式字符串的影响。当前区域(Thread.CurrentThread.CurrentCulture
)使用-
作为日期组件的默认分隔符。
印度文化使用-
,因为你来自印度,这是有意义的(见:http://en.wikipedia.org/wiki/Date_and_time_notation_in_India)
两个选择:
- 选择正确的区域性,该区域性默认使用
/
作为分隔符。例如:LastModified.ToString("MM/dd/yyyy HH:mmtt", new CultureInfo("en-US"));
- 或者用转义字符
'
重新格式化格式字符串。例如:LastModified.ToString("MM'/dd'/yyyy HH:mmtt");
参见:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx