.net - 为什么 new DateTimeOffset(DateTime.Today).AddDays(4).Offset 和 new DateTimeOffset(DateTime.Today.AddDays(4)).Offset 返回不同的值?

标签 .net datetime datetimeoffset

我目前在 UTC+1 时区。 TimeZoneInfo.Local.BaseUtcOffset 返回 +1。

new DateTimeOffset(DateTime.Today).AddDays(4).Offset 返回 +1。

但是 new DateTimeOffset(DateTime.Today.AddDays(4)).Offset 返回 +2!

更有趣的是,直到加上四天的偏移量是相同的。从四天开始调用 new DateTimeOffset(DateTime.Today.AddDays(x)).Offset 返回 +2 偏移量。 为什么?

//Same offset +1
var offset2 = new DateTimeOffset(DateTime.Today).AddDays(7).Offset;
var offset22 = new DateTimeOffset(DateTime.Today.AddDays(7)).Offset;

//Same offset +1
var offset3 = new DateTimeOffset(DateTime.Today).AddDays(3).Offset;
var offset32 = new DateTimeOffset(DateTime.Today.AddDays(3)).Offset;

//Different offset +1 and +2
var offset4 = new DateTimeOffset(DateTime.Today).AddDays(4).Offset;
var offset42 = new DateTimeOffset(DateTime.Today.AddDays(4)).Offset;

//Different offset +1 and +2
var offset5 = new DateTimeOffset(DateTime.Today).AddDays(5).Offset;
var offset52 = new DateTimeOffset(DateTime.Today.AddDays(5)).Offset;

最佳答案

比我的评论更认真的回答...

来自 MSDN:

Because a DateTimeOffset object does not represent the date and time in a specific time zone, the AddDays method does not consider a particular time zone's adjustment rules when it performs date and time arithmetic.

因此

DateTimeOffset(DateTime.Today).AddDays(5)

不更改原始日期的时区(今天 = CET = UTC+1)

还有

DateTime.Today.AddDays(5)

给出 5 天后的本地时间 (CEST = UTC+2)。

所以

DateTimeOffset(DateTime.Today.AddDays(5))

将给出 CEST 偏移量 (UTC+2) 的时间

关于.net - 为什么 new DateTimeOffset(DateTime.Today).AddDays(4).Offset 和 new DateTimeOffset(DateTime.Today.AddDays(4)).Offset 返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976786/

相关文章:

.net - 'GenerateBindingRedirectsOutputType' 选项有什么作用?

android - 在android中获取时区

sql-server - 如何将SQL Server的时间戳列转换为日期时间格式

c# - 使用 RSA AES 提供程序生成自签名 1024 位 X509Certificate2 时出现问题

.net - 将参数传递给 SQLCommand 的最佳方法是什么?

.net - 如何为 .net 选择对象关系映射

python - 用于提取最后一个连字符之前的一定数量的字符的正则表达式

c# - 获取不带小时的当前日期时间 C#

php - 获取给定持续时间内两个时区之间的时区偏移

sql - case 语句内的 TODATETIMEOFFSET