当前位置:  开发笔记 > 编程语言 > 正文

Nodatime根据时间和时区创建ZonedDateTime

如何解决《Nodatime根据时间和时区创建ZonedDateTime》经验,为你挑选了1个好方法。



1> Matt Johnson..:
using NodaTime;
using NodaTime.Text;

// your inputs
string time = "4:30pm";
string timezone = "America/Chicago";

// parse the time string using Noda Time's pattern API
LocalTimePattern pattern = LocalTimePattern.CreateWithCurrentCulture("h:mmtt");
ParseResult parseResult = pattern.Parse(time);
if (!parseResult.Success) {
    // handle parse failure
}
LocalTime localTime = parseResult.Value;

// get the current date in the target time zone
DateTimeZone tz = DateTimeZoneProviders.Tzdb[timezone];
IClock clock = SystemClock.Instance;
Instant now = clock.Now;
LocalDate today = now.InZone(tz).Date;

// combine the date and time
LocalDateTime ldt = today.At(localTime);

// bind it to the time zone
ZonedDateTime result = ldt.InZoneLeniently(tz);

几点说明:

我故意将许多项分成单独的变量,以便您可以看到从一种类型到下一种类型的进展.您可以根据需要压缩它们以减少代码行数.我还使用了显式类型名称.随意使用var.

你可能想把它放在一个函数中.执行此操作时,应将clock变量作为参数传入.这将允许您FakeClock在单元测试中替换a的系统时钟.

一定要了解InZoneLeniently行为方式,并注意它在即将发布的2.0版本中的变化.请参阅2.x迁移指南中的 "Lenient解析器更改" .


在2.0中,如果您要重复从同一时区获取当前日期/时间,您还可以使用`ZonedClock`来简化操作.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有