gpt4 book ai didi

c# - Nodatime 在给定时间和时区的情况下创建 ZonedDateTime

转载 作者:太空狗 更新时间:2023-10-30 00:30:37 25 4
gpt4 key购买 nike

如果给定“4:30pm”和“America/Chicago”,谁能给我最直接的方法来创建 ZonedDateTime。

我希望此对象代表该时区中当前日期的时间。

谢谢!

我试过这个...但它似乎实际上给了我一个在创建 zonedDateTime 时偏移的本地时区的瞬间。

        string time = "4:30pm";
string timezone = "America/Chicago";
DateTime dateTime;
if (DateTime.TryParse(time, out dateTime))
{
var instant = new Instant(dateTime.Ticks);
DateTimeZone tz = DateTimeZoneProviders.Tzdb[timezone];
var zonedDateTime = instant.InZone(tz);

最佳答案

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<LocalTime> 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

  • 请务必了解 InZoneLeniently 的行为方式,并注意它在即将发布的 2.0 版本中的变化。请参阅 the 2.x migration guide 中的“宽松的解析器更改” .

关于c# - Nodatime 在给定时间和时区的情况下创建 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com