c# - C# DateTimeOffset 到 DateTime 的转换
问题描述
有人可以向我解释为什么以下代码返回 DateTimeKind.Unspecified。我期待 DateTimeKind.Utc:
DateTimeOffset dateTimeOffset = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc);
DateTimeKind dateTimeKind = dateTimeOffset.DateTime.Kind;
解决方案
隐式转换运算符from DateTime
toDateTimeOffset
表现为DateTimeOffset
构造函数。您可以查看来源以获取详细信息
// Constructs a DateTimeOffset from a DateTime. For Local and Unspecified kinds,
// extracts the local offset. For UTC, creates a UTC instance with a zero offset.
public DateTimeOffset(DateTime dateTime) {
TimeSpan offset;
if (dateTime.Kind != DateTimeKind.Utc) {
// Local and Unspecified are both treated as Local
offset = TimeZoneInfo.GetLocalUtcOffset(dateTime, TimeZoneInfoOptions.NoThrowOnInvalidTime);
}
else {
offset = new TimeSpan(0);
}
m_offsetMinutes = ValidateOffset(offset);
m_dateTime = ValidateDate(dateTime, offset);
}
并ValidateDate()
返回Unspecified
实物
...
// make sure the Kind is set to Unspecified
//
return new DateTime(utcTicks, DateTimeKind.Unspecified);
这里的重点也在构造函数的备注部分中描述DateTimeOffset
此构造函数的行为取决于参数的 DateTime.Kind 属性的值
dateTime
:如果值为 ,
DateTime.Kind
则新实例DateTimeKind.Utc
的属性设置为 dateTime,并且该属性设置为零。DateTime
Offset
如果值为
DateTime.Kind
或DateTimeKind.Local
,DateTimeKind.Unspecified
则DateTime
新实例的属性设置为 dateTime,该Offset
属性设置为本地系统当前时区的偏移量。
您正在检查输入日期时间并根据它Kind
提取值。Offset
结果的DateTime
属性DateTimeOffset
是Unspecified
,因为Offset
属性已经表示日期偏移量。DateTime
的属性DateTimeOffset
也是说
DateTime.Kind
返回DateTime
对象的属性值为DateTimeKind.Unspecified
。
推荐阅读
- android - AWS Cognito 接受任何密码
- class - 析构问题
- python - 了解 tensorflow 中 tf.slice 的参数以及为什么我不能更改它
- javascript - React 和 Mobx - 在加载时加载 API 数据?
- java - 谷歌云存储使用java上传文件
- ubuntu - IntelliJ IDEA 中奇怪的悬停选择设置 - 如何将其关闭?
- firebase - 如何将 Angular Dart Tour of Heroes 更改为 Firebase 后端
- regex - 正则表达式匹配 XML 起始节点但不匹配自闭合节点,能够匹配一些非正式的语法错别字
- javascript - 来自节点 js 的 jQuery put 请求(用于将 JSON 文件上传到 myjson.com)
- javascript - 与车把上的助手一起工作时遇到麻烦+快递