我正在尝试将日期格式化为此格式。 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 等字符串?
答案 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)
两个选项:
/
作为分隔符。例如:LastModified.ToString("MM/dd/yyyy HH:mmtt", new CultureInfo("en-US"));
\
重新格式化您的格式字符串。例如:例如:LastModified.ToString("MM\/dd\/yyyy HH:mmtt");