我正在尝试将字符串解析为DateTime
,但失败并显示异常。下面提供了代码:
static void Main(string[] args)
{
string dt = "Wed Sep 05 00:00:00 EEST 2012";
string Fm = "EEE MMM dd HH:mm:ss zzz yyyy";
DateTime dateTime;
dateTime = DateTime.ParseExact(dt, Fm, CultureInfo.InvariantCulture);
Console.WriteLine(dateTime.Date);
}
这是例外:
Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
at System.DateTime.ParseExact(String s, String format, IFormatProvider provider)
at DateParser.Program.Main(String[] args) in C:\Users\AhmedSaeed\source\repos\DateParser\DateParser\Program.cs:line 17
答案 0 :(得分:3)
string dt =“ 2012年9月5日星期三00:00:00”;
尽管是实时时区,但“ EEST”与zzz
格式(长度)不匹配,这可能是个问题。
此外,如先例所述,EEE
不是有效的格式字符串。
答案 1 :(得分:1)
DateTime
结构不会不保留时区信息。它仅具有日期和时间值,该值基于一个长为Ticks
的值。这就是为什么没有custom date and time format string与该缩写匹配的原因。 zzz
format specifier用于表示本地操作系统时区相对于UTC的带符号偏移,并且 毫无意义地与文档中所述的DateTime
解析一起使用。
如果要在字符串中解析缩写,则必须将其作为字符串文字转义。除此之外,无法解析它。另一方面,时区缩写甚至不是唯一的。例如,CST可以表示中部标准时间,中国标准时间或古巴标准时间。
也没有EEE
自定义日期格式说明符。缩写的日期名称改为与ddd
format specifier匹配。
string dt = "Wed Sep 05 00:00:00 EEST 2012";
string Fm = "ddd MMM dd HH:mm:ss 'EEST' yyyy";
DateTime dateTime = DateTime.ParseExact(dt, Fm, CultureInfo.InvariantCulture);
Console.WriteLine(dateTime.Date);
这里是demonstration
。