解析字符串日期(包括EEST),但失败

时间:2019-03-21 15:07:13

标签: c# .net date datetime format

我正在尝试将字符串解析为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

2 个答案:

答案 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