将字符串"2017-01-01T12:00:33:123456Z + 02"转换为DateTime

Mon*_*ydt 2 c# datetime

我正在尝试将此字符串从客户转换为日期时间,以将其存储在我的数据库中.

我尝试了几个approches,但似乎没有任何工作.我需要UTC时间的偏移,所以我想我需要用zz做点什么.

这是有效的:

string   test = "2008-06-11T16:11:20.0904778Z";
DateTime publishingTimeStamp = DateTime.ParseExact(test, "o", CultureInfo.InvariantCulture,
             DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

但客户的字符串略有不同,所以我尝试了这个:

string   test = "2017-01-01T12:00:33:123456Z+02"; 
DateTime publishingTimeStamp = DateTime.ParseExact(test, "yyyy-MM-dd'T'HH:mm:ss:ffffffzz", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.我如何转换确切的字符串"2016-01-01T10:00:55:123456Z + 02"?它甚至是可能的,因为它在ffffff前面使用":"

谢谢

Son*_*nül 6

看起来你忘了以Z你的格式转义为字符串文字分隔符'Z'.

string test = "2017-01-01T12:00:33:123456Z+02";
DateTime publishingTimeStamp = DateTime.ParseExact(test, 
                                    "yyyy-MM-dd'T'HH:mm:ss:ffffff'Z'zz", 
                                    CultureInfo.InvariantCulture, DateTimeStyles.None);
Console.WriteLine(publishingTimeStamp); // 01.01.2017 12:00:33
Run Code Online (Sandbox Code Playgroud)

但由于您的字符串具有UTC偏移值,我会将其解析为DateTimeOffset.

string test = "2017-01-01T12:00:33:123456Z+02";
DateTimeOffset publishingTimeStamp = DateTimeOffset.ParseExact(test, 
                                    "yyyy-MM-dd'T'HH:mm:ss:ffffff'Z'zz", 
                                     CultureInfo.InvariantCulture, 
                                     DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

现在你有一个DateTimeOffset{01.01.2017 12:00:33 +02:00}

在此输入图像描述