我正在尝试将日期格式化为这种格式。美国东部时间 2013 年 1 月 20 日下午 2:30,使用此
LastModified.ToString("MM/dd/yyyy HH:mmtt");
但结果是这样的
01-20-2013 02:30PM
不知道为什么它会'-'
显示'/'
。
此外,对于timezome,似乎只有格式可用,如+02:00
. 但我想要时区作为字符串,我找不到任何格式,我怎样才能得到像EDT/PST/IST等这样的字符串?
我正在尝试将日期格式化为这种格式。美国东部时间 2013 年 1 月 20 日下午 2:30,使用此
LastModified.ToString("MM/dd/yyyy HH:mmtt");
但结果是这样的
01-20-2013 02:30PM
不知道为什么它会'-'
显示'/'
。
此外,对于timezome,似乎只有格式可用,如+02:00
. 但我想要时区作为字符串,我找不到任何格式,我怎样才能得到像EDT/PST/IST等这样的字符串?
从自定义日期和时间格式字符串的 MSDN 页面:
“/”自定义格式说明符表示日期分隔符,用于区分年、月和日。从当前或指定区域性的 DateTimeFormatInfoDateSeparator 属性中检索适当的本地化日期分隔符。
如果您希望它绝对使用/
,您应该使用不变的文化,或者引用斜杠 ( "MM'/'dd'/'yyyy hh':'mmtt"
)。请注意,我也引用了时间分隔符,因为这也会因文化而异。根据 Arshad 的回答,我也将其更改为使用 12 小时制。
使用自定义日期/时间格式时,您可能应该使用不变的文化。(例如,使用英国文化以美国为中心的方式格式化字符串似乎很奇怪 - 今天在英国通常表示为 02/05/2013,而不是 05/02/2013。)
就时区说明符而言 - 我不知道在日期/时间格式中使用时区缩写的任何方法。我个人建议不要使用缩写,因为它们可能会模棱两可和令人困惑。我看不到任何内容,TimeZoneInfo
其中甚至可以公开该信息以供您手动添加。
(有可能在Noda Time中,我们将支持使用 abbreviation 进行格式化,但可能不支持parsing,正是因为这种歧义。)
我发现一个错误是,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);
}
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");