C# “转换字符串”;2017-01-01T12:00:33:123456Z&x2B;02“;迄今为止
我正在尝试将从客户处获得的字符串转换为日期时间,以将其存储在我的数据库中 我试过几种方法,但似乎都不管用。 我需要UTC时间的偏移量,所以我想我需要用zz做些什么 这是有效的: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
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
?您可以使用simpleDateTime.Parse(test,out dt)
。对于ISO字符串,它不需要区域性、格式等。不,这是因为格式与最后使用的@I486格式的偏差过大。通常,UTC偏移量不是Z
,因为Z表示UTC或+00。你确定在偏移量之前有一个Z
?事实上,该日期格式在@Wimmel无效,这就是我删除答案的原因。OP的客户应该使用标准的日期格式。谢谢,我真的搞砸了“Z”字。你救了我一天!请注意,除非正确指定区域性,否则至少应转义:
。否则可能会改变解释。@SamiKuhmonen。这就是为什么我使用了InvariantCulture
,因为它已经有:
字符串作为时间分隔符。