NodaTime 是一个为 .NET 设计的开源高级日期和时间库,提供了比 .NET 框架自带的 DateTime
和 DateTimeOffset
更加丰富和可靠的日期时间操作功能。
首先,通过 NuGet 安装 NodaTime 包:
Install-Package NodaTime
NodaTime 提供了多种日期和时间类型,主要包括:
using NodaTime;
// 获取当前 UTC 时间
Instant now = SystemClock.Instance.GetCurrentInstant();
Console.WriteLine($"Current UTC time: {now}");
// 将 Instant 转换为带时区的时间
ZonedDateTime nowInUtc = now.InUtc();
Console.WriteLine($"Current UTC time: {nowInUtc}");
// 获取伦敦时区并进行转换
var london = DateTimeZoneProviders.Tzdb["Europe/London"];
ZonedDateTime nowInLondon = now.InZone(london);
Console.WriteLine($"Current London time: {nowInLondon}");
// 创建本地日期和时间
LocalDate localDate = new LocalDate(2024, 7, 26);
LocalTime localTime = new LocalTime(10, 26, 9);
LocalDateTime localDateTime = localDate.At(localTime);
Console.WriteLine($"Local date and time: {localDateTime}");
// 创建带时区的时间
LocalDateTime localDateTime = LocalDateTime.FromDateTime(new DateTime(2024, 7, 26, 10, 26, 9));
DateTimeZone systemTimeZone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
DateTimeZone newYorkTimeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
ZonedDateTime zonedDateTime = localDateTime.InZoneLeniently(newYorkTimeZone);
Console.WriteLine($"New York time: {zonedDateTime}");
// 计算时间间隔
Instant now = SystemClock.Instance.GetCurrentInstant();
Duration duration = Duration.FromMinutes(3);
Instant then = now + duration;
Console.WriteLine($"Current time: {now}");
Console.WriteLine($"Time after 3 minutes: {then}");
// 格式化日期输出
LocalDate localDate = new LocalDate(2024, 7, 26);
string formattedString = localDate.ToString("yyyy-MM-dd");
Console.WriteLine($"Formatted date: {formattedString}");