0

我正在尝试将日期格式化为这种格式。美国东部时间 2013 年 1 月 20 日下午 2:30,使用此

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

但结果是这样的

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

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

4

3 回答 3

4

从自定义日期和时间格式字符串的 MSDN 页面:

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

如果您希望它绝对使用/,您应该使用不变的文化,或者引用斜杠 ( "MM'/'dd'/'yyyy hh':'mmtt")。请注意,我也引用了时间分隔符,因为这也会因文化而异。根据 Arshad 的回答,我也将其更改为使用 12 小时制。

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

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

(有可能在Noda Time中,我们将支持使用 abbreviation 进行格式化,但可能不支持parsing,正是因为这种歧义。)

于 2013-05-02T09:37:50.713 回答
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);
}
于 2013-05-02T09:55:01.507 回答
0

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

于 2013-05-02T09:39:19.347 回答