繁体   English   中英

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

[英]Convert datetime string with this format: (yyyy-MM-dd'T'hh:mm:ss-zzz)

我收到的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" });

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

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

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

DateTimeOffset.Parse("2015-07-09T08:38:49-07:00")

要么

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

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

JsonConvert.DeserializeObject<DateTimeOffset>("\"2015-07-09T08:38:49-07:00\"")

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

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

尝试这样的格式字符串:

"yyyy-MM-dd'T'hh:mm:ss%K"

从示例中可以看出,这比您指定的更好解析(重复的hh:mm可能会搞砸了)。

string input = "2015-07-09T08:38:49-07:00";
DateTime dt = DateTime.ParseExact(input, "yyyy-MM-dd'T'hh:mm:ss%K", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(input);
Console.WriteLine(dt.ToString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM