使用NodaTime获取当地时间

本文关键字:当地时间 获取 NodaTime 使用 | 更新日期: 2023-09-27 18:27:04

NodaTime的新手,我选择使用它而不是BCL库,因为它在处理日期时消除了很多歧义。然而,我似乎无法让它做我想做的事。我有一个按年、月、日、小时和分钟指定的日期和时间。我还有两个时区,需要显示"时钟时间"。例如,如果我的输入是2015年12月15日下午3:30,并且我的两个时区是中央标准和东部标准(间隔一小时),我希望我的输出是

12/15/2015 3:30 PM Central
12/15/2015 4:30 PM Eastern

但我似乎只能得到中央时区(如果这很重要的话,对我来说是本地时区)。这是我的代码:

var localDateTime = new LocalDateTime(
            year: 2015,
            month: 12,
            day: 15,
            hour: 15,
            minute: 30,
            second: 0
            );
var centralTimeZone = DateTimeZoneProviders.Bcl.GetZoneOrNull("Central Standard Time");
var easternTimeZone = DateTimeZoneProviders.Bcl.GetZoneOrNull("Eastern Standard Time");
var centralTime = centralTimeZone.AtLeniently(localDateTime);
var easternTime = easternTimeZone.AtLeniently(localDateTime);

看来centralTime和easternTime都是ZonedDateTime对象,其时间为2015-12-10T15:30,偏移量正确,即centralTime为-6,easternTime为-5。)

我只是不知道如何得到我想要的输出。

使用NodaTime获取当地时间

听起来你的初始日期/时间实际上是在中央时间-所以一旦你执行了初始转换,你就可以说"嘿,我想要相同的时刻,但在不同的时区"-这与"我想要相同本地时间的不同时刻"不同。您想要:

var centralTime = centralTimeZone.AtLeniently(localDateTime);
var easternTime = centralTime.InZone(easternTimeZone);