日期时间格式不正确

本文关键字:不正确 格式 时间 日期 | 更新日期: 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)

两个选择:

  1. 选择正确的区域性,该区域性默认使用/作为分隔符。例如:LastModified.ToString("MM/dd/yyyy HH:mmtt", new CultureInfo("en-US"));
  2. 或者用转义字符'重新格式化格式字符串。例如:LastModified.ToString("MM'/dd'/yyyy HH:mmtt");

参见:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx