NodaTime 是 .NET 平台下功能强大的日期和时间处理库

58 阅读1分钟

NodaTime 是 .NET 平台下功能强大的日期和时间处理库,旨在替代和增强系统自带的 DateTime 类型。它解决了 DateTime 在时区、夏令时、精度等方面的诸多不足,提供更准确、灵活的时间计算和转换能力。

主要特点:

  • 明确区分本地时间、UTC 时间、带时区时间等类型
  • 支持全球时区和夏令时规则
  • 精确的时间间隔和周期计算
  • 易于与 ISO 标准和其他时间格式互操作

用法举例

1. 获取当前时间(本地/UTC)

using NodaTime;

var now = SystemClock.Instance.GetCurrentInstant(); // 获取当前 UTC 时间点
var localDateTime = now.InZone(DateTimeZoneProviders.Tzdb["Asia/Shanghai"]).ToLocalDateTime();
Console.WriteLine(localDateTime); // 输出上海本地时间

2. 时区转换

using NodaTime;

var instant = Instant.FromDateTimeUtc(DateTime.UtcNow);
var nyTime = instant.InZone(DateTimeZoneProviders.Tzdb["America/New_York"]);
Console.WriteLine(nyTime); // 输出纽约时间

3. 计算时间间隔

using NodaTime;

var start = new LocalDateTime(2025, 10, 1, 8, 0);
var end = new LocalDateTime(2025, 10, 8, 8, 0);
var period = Period.Between(start, end, PeriodUnits.Days);
Console.WriteLine(period.Days); // 输出: 7

说明:

  • Instant 表示绝对时间点(UTC)。
  • DateTimeZoneProviders.Tzdb 提供全球时区数据。
  • Period 用于表示时间间隔,支持年、月、日、时、分、秒等单位。
  • 适合需要精确时区处理、跨时区计算、避免 DateTime 常见坑的场景。

更多用法可参考官方文档:NodaTime 官网