使用以下格式转换datetime字符串:(yyyy-MM-dd'T'hh:mm:ss-zzz)

joe*_*yth 6 c# datetime json.net

我收到一个JSON字符串,其中包含一个如下所示的日期:2015-07-09T08:38:49-07:00最后一部分是时区.有没有标准的方法将其转换为DateTimeOffset

这是我到目前为止:

var olu = JsonConvert.DeserializeObject<OneLoginUser>(jToken.ToString(), new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd'T'HH:mm:sszzz" });
Run Code Online (Sandbox Code Playgroud)

这不会反转任何日期.我已经尝试使用-Zhh:mm时区数据,但我似乎无法反序列化任何日期.

作为参考,这是来自一个SSO提供商OneLogin.这是用户文档的链接.注意关于顶部日期的位.

Mat*_*int 10

这是带有偏移的标准ISO 8601扩展格式时间戳,也包含在RFC 3339中.没什么特别的.

DateTimeOffset.Parse("2015-07-09T08:38:49-07:00")
Run Code Online (Sandbox Code Playgroud)

要么

DateTimeOffset.ParseExact("2015-07-09T08:38:49-07:00", "yyyy-MM-dd'T'HH:mm:sszzz",
                                                       CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

使用JSON.Net,默认值应该可以正常工作.无需指定任何特殊内容.

JsonConvert.DeserializeObject<DateTimeOffset>("\"2015-07-09T08:38:49-07:00\"")
Run Code Online (Sandbox Code Playgroud)

在问题评论中发布小提琴布莱恩表示,它可以在反序列化更大的对象时起作用.如果您还没有使用它,也许您可​​以编辑您的问题以显示您尝试反序列化的特定JSON以及您将其放入的对象结构.

我注意到你的代码有一件事,你展示了json的来源jToken.ToString(),所以你必须先解析一下使用的地方JObject.Parse.这样做有点奇怪,只是转换回json并反序列化.要么直接从json字符串使用JsonConvert.DeserializeObject,要么使用,jToken.ToObject<OneLoginUser>()如果你已经jToken出于某种其他原因.无需混合使用这两种API,您可能会在此过程中丢失日期/时间信息,具体取决于您的设置.