如何解决尽管输入的日期时间字符串包含时区信息,但DateTime.TryParseExact的结果仍具有DateTimeKind.Unspecified
string dateTimeStr = "2020-01-02T04:00:00Z";
string[] formats = { "yyyy-MM-dd'T'HH:mm:ss'Z'","yyyy-MM-dd'T'HH:mm:ss.fff'Z'" };
if (DateTime.TryParseExact(dateTimeStr,formats,null,DateTimeStyles.None,out DateTime dateValue))
{
Console.WriteLine(dateValue.Kind); // why set to DateTimeKind.Unspecified here?
}
else
{
Console.WriteLine(dateValue);
}
如果
s
包含时区信息,则必要时将时间转换为本地时间,并且将返回的Kind
对象的DateTime
属性设置为DateTimeKind.Local
但是,尽管在dateValue
的末尾加了“ Z”以指定其时区,但在注释行中,Kind
的{{1}}字段仍设置为DateTimeKind.Unspecified
作为Utc。
我不知道它是如何发生的,我的工作是将输出dateTimeStr
的{{1}}设置为DateTime
。我该如何实现?
解决方法
'Z'
只是一个转义的字母Z,不表示任何含义(与'T'
相同)。格式字符串is K
中的时区说明符。
string[] formats = { "yyyy-MM-ddTHH:mm:ssK","yyyy-MM-ddTHH:mm:ss.fffK" };
这将为您提供DateTimeKind.Local
一样的文档记录,然后您对结果调用.ToUniversalTime()
即可到达UTC。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。