我如何使用NodaTime将区域性的ShortDatePattern格式设置为字符串?

问题描述 投票:1回答:1

使用C#日期时间和区域性,我可以使用以下格式格式化为字符串:

DateTime exampleDate = DateTime.Now;
CultureInfo culture = new CultureInfo("fr-FR");
String datetimeFormat = exampleDate.ToString(culture.DateTimeFormat.ShortDatePattern));

如何使用NodaTime实现相同的目标?我已经尝试过以下组合(不编译-ToString需要使用NodaTimef两个参数):

DateTimeZone timeZone = DateTimeZoneProviders.Tzdb["fr-FR"];
ZonedDateTime nowZonedDateTime = new ZonedDateTime(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()), timeZone);
String nodaFormat = nowZonedDateTime.LocalDateTime.ToString(culture.DateTimeFormat.ShortDatePattern));

我还在文档周围尝试过组合,这表明我需要使用“ d”来格式化短日期(这会引发异常):

String nodaFormat = nowZonedDateTime.LocalDateTime.ToString("d", culture));

我想念什么?

c# nodatime
1个回答
1
投票

首先,TZDB中没有ID为fr-FR的时区,您的意思是Europe/Paris

第二,ToString实际上接受2个参数-模式字符串和IFormatProvider,它们可以是您的CultureInfo。因此,您已经非常接近了-您只需要传递culture作为第二个参数:

CultureInfo culture = new CultureInfo("fr-FR");
DateTimeZone timeZone = DateTimeZoneProviders.Tzdb["Europe/Paris"];
ZonedDateTime nowZonedDateTime = new ZonedDateTime(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()), timeZone);
String nodaFormat = nowZonedDateTime.LocalDateTime.ToString(culture.DateTimeFormat.ShortDatePattern, culture);
// nodaFormat would be "27/12/2019"
© www.soinside.com 2019 - 2024. All rights reserved.