![](/img/trans.png)
[英]Test convert string to date time other than DateTime.TryParseExact
[英]DateTime.TryParseExact's result has DateTimeKind.Unspecified despite the input date time string contains timezone information
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
包含时区信息,则根据需要将时间转换为本地时间,并将返回的DateTime
object 的Kind
属性设置为DateTimeKind.Local
。
但是,在注释行中, dateValue
的Kind
字段设置为DateTimeKind.Unspecified
,尽管dateTimeStr
中的尾随“Z”将其时区指定为 Utc。
我不知道它是怎么发生的,我的目标是让 output DateTime
的Kind
设置为DateTimeKind.Utc
。 我怎么能做到这一点?
'Z'
只是一个转义的字面字母 Z,它没有任何意义(对于'T'
也是如此)。 格式字符串中的时区说明符是K
。
string[] formats = { "yyyy-MM-ddTHH:mm:ssK", "yyyy-MM-ddTHH:mm:ss.fffK" };
这将为您提供DateTimeKind.Local
像记录的那样,然后您在结果上调用.ToUniversalTime()
以获取 UTC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.