gpt4 book ai didi

c# - 使用 NodaTime,如何在当前文化中格式化 ZonedDateTime

转载 作者:太空狗 更新时间:2023-10-29 23:06:33 25 4
gpt4 key购买 nike

我有一个 ZonedDateTime,我想显示它,以便日期时间格式化为工作站上配置的短日期和短时间,后跟偏移量(类似于... 05/01/2005 02:30 PM - 05:00)。我预计这样的事情会奏效...

var patternDateTimeOffset = 
ZonedDateTimePattern.CreateWithCurrentCulture("g o<m>", DateTimeZoneProviders.Tzdb);
lblOriginalDateTimeAndOffsetVal.Text = patternDateTimeOffset.Format(zonedDateTime);

但是,ZonedDateTimePattern 似乎不像 LocalDateTimePattern 那样支持“g”。上面的代码抛出一个 NodaTime.Text.InvalidPatternException。

我可以将“g”替换为“MM/dd/yyyy hh:mm”,但它不会使用当前区域性。

我可以使用 LocalDateTimePattern 作为日期时间,然后使用 ZonedDateTimePattern 连接偏移量。这可行,但看起来很丑。

这似乎是一件很常见的事情。我是 NodaTime 的新手,所以我确定我遗漏了一些东西。我正在使用 NodaTime 1.3.1 并以 .net 4.0 为目标。感谢您的帮助。

最佳答案

g 作为标准模式说明符很好——但仅限于其自身;它不能是自定义模式的一部分,而这正是您在这里有效地尝试做的事情。您实际上是在尝试混合搭配,我们不支持这种做法 :(

以及您已经概述的选项(我同意这些选项会起作用但有点难看)您可以使用

var bclDateFormat = CultureInfo.CurrentCulture.DateTimeFormat;
var localDateTimePattern =
bclDateFormat.ShortDatePattern + " " + bclDateFormat.ShortTimePattern;
var patternDateTimeOffset = ZonedDateTimePattern.CreateWithCurrentCulture(
localDateTimePattern + " o<m>",
DateTimeZoneProviders.Tzdb);

诚然,仍然不是很愉快 - 但无论如何 g 确实是这样做的(使用两个现有的短模式,只是用空格分隔它们)。

正如 Matt 所说,请提交功能请求 - 我不确定最好的方法是什么,但我会考虑一下。

关于c# - 使用 NodaTime,如何在当前文化中格式化 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792508/

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