C#如何将RoundTrip格式日期字符串转换为DateTime对象?
解析带毫秒和时区偏移的ISO格式字符串为DateTime对象
嘿,这个格式其实是标准的ISO 8601扩展格式,.NET里的DateTime.Parse()本来就支持它,可能是你没注意到一些细节导致没成功?我给你几个实用的方案:
直接用DateTime.Parse()(推荐简单场景)
只要指定正确的文化信息和解析样式,就能轻松搞定。因为这个格式是国际化标准,用CultureInfo.InvariantCulture可以避免系统区域设置的干扰,加上DateTimeStyles.AdjustToUniversal还能自动转成UTC时间:string dateString = "2018-03-27T14:33:54.4092769+03:00"; DateTime parsedDateTime = DateTime.Parse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);如果你想保留原始的时间偏移对应的本地时间,把
DateTimeStyles.AdjustToUniversal换成DateTimeStyles.None就行。用DateTime.ParseExact()精确控制格式
要是你想明确指定格式规则,避免任何歧义,就用这个方法。你的字符串格式对应的格式字符串是"yyyy-MM-ddTHH:mm:ss.fffffffzzz"——其中fffffff对应7位毫秒,zzz对应带冒号的时区偏移(比如+03:00):string dateString = "2018-03-27T14:33:54.4092769+03:00"; string format = "yyyy-MM-ddTHH:mm:ss.fffffffzzz"; DateTime parsedDateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None);额外建议:优先考虑DateTimeOffset
如果你需要保留时区偏移信息(而不是只存一个时间值),更推荐用DateTimeOffset类型,它会直接存储时间和对应的偏移量,后续处理时区转换更方便:string dateString = "2018-03-27T14:33:54.4092769+03:00"; DateTimeOffset dateOffset = DateTimeOffset.Parse(dateString); // 转成DateTime可以用dateOffset.UtcDateTime或dateOffset.LocalDateTime
内容的提问来源于stack exchange,提问作者Vyacheslav Kovalchuk
相关产品推荐
相关产品推荐

