gpt4 book ai didi

c# - 为什么我不能向 OffsetDateTime 添加月份?

转载 作者:行者123 更新时间:2023-11-30 14:45:00 29 4
gpt4 key购买 nike

我正在使用 NodaTime 管理 .Net Core WebApi 中的日期和时区。库中的一种类型是 OffsetDateTime,它与 .Net 框架中的 DateTimeOffset 非常相似。我到处都使用它以明确和透明的方式操作日期,因为日期有时会进入系统时区和用户时区。

我需要在某个时间点将一个月添加到某个日期,但我不能将一个月添加到 OffsetDateTime 对象,我所能做的就是添加到小时或称为 Duration 的类型,该类型与日历无关。如果它是我能理解的 Instant 类型,因为 Instant 以一种非常抽象的方式表示一个时间点,而不是 OffsetDateTime。 OffsetDateTime 甚至有一个“Calendar”属性,它确实表明它绑定(bind)到一个日历系统,该系统应该允许您像我想做的那样进行算术运算,而无需进行类型转换等。

最重要的是,DateTimeOffset(来自 .net 框架)允许您添加月份,但我希望保持一致并在所有地方使用相同的类型。

长话短说,我做不到:

public OffsetDateTime GetPreviousMonth(OffsetDateTime input)
{
return input.AddMonths(-1)
}

我只能做:

offsetDateTime.PlusHours(15)
offsetDateTime.PlusMinutes(3000)
offsetDateTime.Minus(Duration.FromMinutes(60))
offsetDateTime.Minus(Duration.FromHours(1))

知道如何在不进行类型转换的情况下解决这个问题吗?也许我忽略了文档中的某些内容,但我不这么认为。

最佳答案

OffsetDateTime 表示本地日期时间与 UTC 的偏移量, Instant。

但是,它没有绑定(bind)到时区。

因此,您可以从中添加一个“固定”数量,例如秒、分钟和小时,因为它们不依赖于 TimeZone。

您不能从中减去一个月,因为它不知道过去一个月是否有日光转换。

我知道您要求没有类型转换的解决方案,但实际上您做不到。要正确处理此问题,您必须将其转换为具有正确时区的 ZonedDateTime。任何未指定时区的解决方案最终都可能会遇到结果错误的情况。

关于c# - 为什么我不能向 OffsetDateTime 添加月份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55854640/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com