Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “转换字符串”;2017-01-01T12:00:33:123456Z&x2B;02“;迄今为止_C#_Datetime - Fatal编程技术网

C# “转换字符串”;2017-01-01T12:00:33:123456Z&x2B;02“;迄今为止

C# “转换字符串”;2017-01-01T12:00:33:123456Z&x2B;02“;迄今为止,c#,datetime,C#,Datetime,我正在尝试将从客户处获得的字符串转换为日期时间,以将其存储在我的数据库中 我试过几种方法,但似乎都不管用。 我需要UTC时间的偏移量,所以我想我需要用zz做些什么 这是有效的: string test = "2008-06-11T16:11:20.0904778Z"; DateTime publishingTimeStamp = DateTime.ParseExact(test, "o", CultureInfo.InvariantCulture, DateTime

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

我试过几种方法,但似乎都不管用。 我需要UTC时间的偏移量,所以我想我需要用zz做些什么

这是有效的:

string   test = "2008-06-11T16:11:20.0904778Z";
DateTime publishingTimeStamp = DateTime.ParseExact(test, "o", CultureInfo.InvariantCulture,
             DateTimeStyles.None);
但是客户的字符串略有不同,所以我尝试了这个:

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);
不幸的是,它不起作用。如何转换精确的字符串“2016-01-01T10:00:55:123456Z+02”?甚至可能是因为它在FFFF前面使用“:”吗


谢谢

看起来您忘记了将
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
但由于您的字符串有值,我将把它解析为
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);
现在您有一个
DateTimeOffset
作为
{01.01.2017 12:00:33+02:00}


“…它不工作”怎么办?你得到了什么结果?你期望得到什么结果?你有错误吗?如果是,哪一个?为什么
ParseExact
?您可以使用simple
DateTime.Parse(test,out dt)
。对于ISO字符串,它不需要区域性、格式等。不,这是因为格式与最后使用的@I486格式的偏差过大。通常,UTC偏移量不是
Z
,因为Z表示UTC或+00。你确定在偏移量之前有一个
Z
?事实上,该日期格式在@Wimmel无效,这就是我删除答案的原因。OP的客户应该使用标准的日期格式。谢谢,我真的搞砸了“Z”字。你救了我一天!请注意,除非正确指定区域性,否则至少应转义
。否则可能会改变解释。@SamiKuhmonen。这就是为什么我使用了
InvariantCulture
,因为它已经有
字符串作为
时间分隔符。