Art*_* L. 5 c# datetime nodatime
我有一个ZonedDateTime,我希望显示它,以便在工作站上配置短日期和短时间格式化日期时间,然后是偏移量(类似于... 05/01/2005 02:30 PM -05:00 ).我希望这样的东西能起作用......
var patternDateTimeOffset = 
   ZonedDateTimePattern.CreateWithCurrentCulture("g o<m>", DateTimeZoneProviders.Tzdb);
lblOriginalDateTimeAndOffsetVal.Text = patternDateTimeOffset.Format(zonedDateTime);
Run Code Online (Sandbox Code Playgroud)
但是,看起来ZonedDateTimePattern中不支持"g",就像它在LocalDateTimePattern中一样.上面的代码抛出NodaTime.Text.InvalidPatternException.
我可以用"MM/dd/yyyy hh:mm"替换"g",但之后它没有使用当前的文化.
我可以使用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);
Run Code Online (Sandbox Code Playgroud)
尽管如此,仍然不是非常令人愉快 - 但g无论如何,这实际上是无关紧要的(使用现有的两种短模式,只是空间分隔它们).
正如Matt所说,请提交功能请求 - 我不确定这里最好的方法是什么,但我会考虑一下.