在.NET开发中,处理日期和时间是一项常见的任务。虽然.NET框架提供了基本的日期时间类,如DateTime
、DateOnly
和TimeOnly
,但这些类的功能有限,不能满足所有需求。因此,开发者经常需要寻找额外的库来扩展日期时间处理的能力。本文将介绍一个为.NET设计的日期和时间库,它支持ISO 8601-2:2019扩展日期时间格式,并提供了丰富的日期时间操作方法。
ISO 8601-2:2019标准定义了扩展日期时间格式(EDTF),它允许更灵活地表示日期和时间。例如,可以使用1960S2
表示1960年代的第二年,或者使用Y-3388E2S3
表示公元前338000年到公元前338999年之间的某个时间。这种格式为表示不确定的日期和时间提供了便利。
该库提供了ExtendedDateTime
类,可以像使用.NET的DateTime
类一样使用它,并且支持ExtendedDateTime
、DateTime
和DateOnly
之间的大多数转换。这意味着开发者可以轻松地在这些类型之间进行转换,而无需编写复杂的代码。
该库提供了超过300种方法来处理日期和时间,以及它们的时间范围(时间段)。这些方法包括但不限于:
NextWorkday()
)IsWeekend()
)IsHoliday()
)IsBetween()
)NumberOfDaysUntil()
)NumberOfHolidaysUntil()
)此外,该库还提供了一些高级操作,如枚举日期直到某个日期(EnumerateDaysUntil
)、枚举月份直到某个日期(EnumerateMonthsUntil
)等。这些操作可以帮助开发者更轻松地处理复杂的日期时间逻辑。
开发者可以使用EnumerateInStepsUntil
方法创建自定义的日期时间枚举。例如,可以创建一个枚举,从某个日期开始,每隔10分钟生成一个时间点,直到下一周的开始,同时跳过午夜。
此外,该库还提供了IDateTimeProvider
接口,允许开发者注入自己的日期和时间提供者。这意味着开发者可以轻松地进行单元测试,或者在需要时模拟特定的日期和时间。
要使用这个库,开发者只需安装NuGet包即可。安装后,可以像使用.NET的日期时间对象一样使用这个库。
该库在计算假期时使用了Nager.Date
库,但需要开发者提供自己的许可证密钥。此外,还提供了一个默认的假期提供者DefaultHolidayProvider()
,它只包含一些国际假期。开发者也可以通过IHolidayProvider
接口和DateTimeProvider.SetHolidayProvider()
方法使用自己的假期提供者。
该库的文档相对完整,但可能存在一些遗漏或错误。如果开发者发现任何问题,请随时反馈。此外,该库的单元测试覆盖率约为98%,一些边缘情况尚未覆盖。这意味着开发者可以对代码的正确性有很高的信心。
以下是一些使用该库的示例代码:
var someWhenInThe60s = new ExtendedDateTime("1960S2");
var longAgo = new ExtendedDateTime("Y-3388E2S3");
var fourYearsIn1670 = new ExtendedDateTime("1670..1673");
var someDayInSpring = new ExtendedDateTime("2021-21");
var aRange = new ExtendedDateTime("..1983-12-31,1984-10-10..1984-11-01,1984-11-05..");