以特定格式解析日期和时间

noo*_*oob -1 c# datetime

我正在以下列格式获取时间戳字符串 -

2015-02-01T12:11:06Z
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为DateTime对象.我尝试了以下代码 -

timestamp = DateTime.ParseExact(attr.Value,"yyyy-MM-ddThh:mm:ss",null);
Run Code Online (Sandbox Code Playgroud)

但它正在抛出异常.

System.FormatException:String未被识别为有效的DateTime.

在System.DateTimeParse.ParseExact(String s,String format,DateTimeFormatInfo dtfi,DateTimeStyles style)

at System.DateTime.ParseExact(String s,String format,IFormatProvider provider)

我知道我的格式错了.有什么方法可以使它工作?

更新
J. Steen的方法对我有用,他是第一个发表评论的人,但SonerGönül提供了更好的解释和更好的方法,所以我接受SonerGönül 在这里提到的答案以及J. Steen同意这一点.感谢你们俩.无论如何,我正在支持所有正确的答案.:-)

Son*_*nül 6

你忘记了Z最后的部分并hh改为HH;

string s = "2015-02-01T12:11:06Z";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt); // 01/02/2015 14:11:06
}
Run Code Online (Sandbox Code Playgroud)

由于没有自定义日期和时间格式Z,解析方法将其视为字符文字.但是在这种情况下,你的小时部分会有所不同,OffSet因为这个操作会创建你的DateTimeKindas Local.由于我现在的偏移是+02:00正确的,它将产生14:11:06,而不是12:11:06

string s = "2015-02-01T12:11:06";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt); // 01/02/2015 12:11:06
}
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止,唯一的答案是指定CultureInfo.InvariantCulture:如果当前文化使用TimeSeparator而不是":",则可能会失败 (2认同)