DateTime格式不正确

时间:2013-05-02 09:36:29

标签: c# datetime-format

我正在尝试将日期格式化为此格式。 01/20/2013 02:30 PM EDT,使用此

LastModified.ToString("MM/dd/yyyy HH:mmtt");

但结果是这样的

01-20-2013 02:30PM不知道为什么显示'-'代替'/'

此外,对于 timezome ,似乎只有+02:00这样的格式可用。但我想时区为字符串,我找不到任何格式,我怎么能得到像 EDT / PST / IST 等字符串?

3 个答案:

答案 0 :(得分:4)

来自custom date and time format strings上的MSDN页面:

  

“/”自定义格式说明符表示日期分隔符,用于区分年,月和日。从当前或指定区域性的DateTimeFormatInfoDateSeparator属性中检索适当的本地化日期分隔符。

如果您希望明确使用/,则要么使用不变文化,引用斜杠("MM'/'dd'/'yyyy hh':'mmtt")。请注意,我也引用了时间分隔符,因为它也可能因文化而异。根据Arshad的回答,我也改变它使用12小时制。

使用自定义日期/时间格式时,您应该使用不变的文化。 (例如,使用英国文化以美国为中心的方式格式化字符串似乎很奇怪 - 今天通常在英国表示为02/05/2013,而不是05/02/2013。)

就时区说明符而言 - 我不知道在日期/时间格式中使用时区缩写的任何方法。无论如何,我个人会建议反对使用缩写,因为它们可能含糊不清且令人困惑。我无法在TimeZoneInfo中看到任何内容,甚至会公开该信息以供您手动添加。

(在Noda Time中我们可能会支持带缩写的格式,但可能不会解析,正是因为含糊不清。)

答案 1 :(得分:2)

我发现一个错误是,HH表示24 HRS格式的时间。你可以尝试

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);
}

答案 2 :(得分:0)

DateTime的格式受您的Culture和格式字符串的影响。您当前的文化(Thread.CurrentThread.CurrentCulture)使用-作为日期组件的默认分隔符。

印度文化使用-,因为你来自Inda,所以它会有所作为(参见: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");
  3. 另请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx