DateTimeOffset,理解不清楚
DateTimeOffset, not clear understanding
我阅读了有关 DateTimeOffset、属性 DateTime 的文档。
https://msdn.microsoft.com/en-us/library/system.datetimeoffset.datetime(v=vs.110).aspx
The DateTime property is not affected by the value of the Offset
property. This property returns both the date and the time component
of a DateTimeOffset object, which makes it useful for performing
DateTimeOffset to DateTime conversion. For example, if the
DateTimeOffset object has a date and time value of "1/12/07 4:01pm +
7:30", the property returns a date of "1/12/07 4:01pm".
我有 +2 GMT 时区并尝试以下代码:
var dateString = "2012-03-01 00:00:00-23:00";
var birthDay = DateTime.Parse(dateString);
DateTimeOffset dtOffset = new DateTimeOffset(birthDay);
然后我查看 dtOffset 对象的 属性 DateTime 并查看 {3/2/2012 1:00:00 AM} 值。 UtcDateTime 具有 {3/1/2012 11:00:00 PM} 值,LocalDateTime 具有 {3/2/2012 1:00:00 AM} 值。因此,属性 DateTimeOffset 实例的 DateTime 具有 DateTime WITH Offset。我哪里错了?
DateTimeOffset 确实应该称为 ADateTimeWithAnOffset,因为它有两个属性——您提供的 DateTime 和 Offset。这使得它对转换很有用,但它本身不会转换任何东西。
From the docs...DateTimeOffset 结构包括一个 DateTime 值,以及一个 Offset 属性,它定义了当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差异。
你的时间很有趣,不是因为 DateTimeOffset,而是因为你的初始字符串格式。一旦您将偏移量添加到字符串的发送中,它就会在创建基础 DateTime 时考虑您的本地时间偏移量。在我所在的时区,即 UCT-5,会发生这种情况...
Console.WriteLine(DateTime.Parse( "2012-03-01"));
3/1/2012 12:00:00 AM
Console.WriteLine(DateTime.Parse("2012-03-01 00:00:00-23:00"));
3/1/2012 6:00:00 PM
如果您检查基础 DateTime 上的种类 属性,您会发现它是本地的,只要您从具有偏移量的字符串创建它。
我认为您错过的是 UtcDateTime 和 LocalDateTime 实际上是转换。因此,如果您引用这两个属性,您就是在请求转换后的值。因此,他们得到的值与声明 "The DateTime property is not affected by the value of the Offset property."
并不矛盾
UtcDateTime 使用偏移量将 DateTime 属性 的值转换为 UTC(它将 DateTime 部分增加 23 小时)。
LocalDateTime 根据您的 Windows TimeZone 设置(必须是 UTC-1?)将 DateTime 属性 的值转换为您的本地时间。
我阅读了有关 DateTimeOffset、属性 DateTime 的文档。
https://msdn.microsoft.com/en-us/library/system.datetimeoffset.datetime(v=vs.110).aspx
The DateTime property is not affected by the value of the Offset property. This property returns both the date and the time component of a DateTimeOffset object, which makes it useful for performing DateTimeOffset to DateTime conversion. For example, if the DateTimeOffset object has a date and time value of "1/12/07 4:01pm + 7:30", the property returns a date of "1/12/07 4:01pm".
我有 +2 GMT 时区并尝试以下代码:
var dateString = "2012-03-01 00:00:00-23:00";
var birthDay = DateTime.Parse(dateString);
DateTimeOffset dtOffset = new DateTimeOffset(birthDay);
然后我查看 dtOffset 对象的 属性 DateTime 并查看 {3/2/2012 1:00:00 AM} 值。 UtcDateTime 具有 {3/1/2012 11:00:00 PM} 值,LocalDateTime 具有 {3/2/2012 1:00:00 AM} 值。因此,属性 DateTimeOffset 实例的 DateTime 具有 DateTime WITH Offset。我哪里错了?
DateTimeOffset 确实应该称为 ADateTimeWithAnOffset,因为它有两个属性——您提供的 DateTime 和 Offset。这使得它对转换很有用,但它本身不会转换任何东西。
From the docs...DateTimeOffset 结构包括一个 DateTime 值,以及一个 Offset 属性,它定义了当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差异。
你的时间很有趣,不是因为 DateTimeOffset,而是因为你的初始字符串格式。一旦您将偏移量添加到字符串的发送中,它就会在创建基础 DateTime 时考虑您的本地时间偏移量。在我所在的时区,即 UCT-5,会发生这种情况...
Console.WriteLine(DateTime.Parse( "2012-03-01"));
3/1/2012 12:00:00 AM
Console.WriteLine(DateTime.Parse("2012-03-01 00:00:00-23:00"));
3/1/2012 6:00:00 PM
如果您检查基础 DateTime 上的种类 属性,您会发现它是本地的,只要您从具有偏移量的字符串创建它。
我认为您错过的是 UtcDateTime 和 LocalDateTime 实际上是转换。因此,如果您引用这两个属性,您就是在请求转换后的值。因此,他们得到的值与声明 "The DateTime property is not affected by the value of the Offset property."
并不矛盾UtcDateTime 使用偏移量将 DateTime 属性 的值转换为 UTC(它将 DateTime 部分增加 23 小时)。
LocalDateTime 根据您的 Windows TimeZone 设置(必须是 UTC-1?)将 DateTime 属性 的值转换为您的本地时间。