![](/img/trans.png)
[英]how to convert MM/dd/YYYY hh:mm:ss AM to YYYY-MM-dd datetime format by linq?
[英]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" });
这不会反转任何日期。 我尝试使用-Z
和hh:mm
作为时区数据,但我似乎无法反序列化任何日期。
这是带有偏移的标准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.