c# - 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
。
但是,在注释行中,尽管 'Z' 中的尾部将其时区指定为 Utc ,但dateValue
'Kind
字段设置为 。DateTimeKind.Unspecified
dateTimeStr
我不知道它是怎么发生的,我的目标是让输出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。
推荐阅读
- python - 回归分类报告(sklearn)
- python - 如何将 Keras CNN 模型部署到 Web 服务?
- macos - launchctl config 用户路径有什么作用?
- symfony - Symfony 依赖注入
- java - 这个向上转换的演示如何工作?
- matlab - 如何将键值对添加到 Containers.Map 对象?
- android - 如何为 android 和 ios 单反应原生 kontaktio
- android - 用户和当前进程都没有 android.permission.USE_FINGERPRINT
- perl - Perl - 如何跳过先前处理中已经读取的行
- abap - 如何以编程方式添加表数据以传输请求?