使用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));
我想念什么?
首先,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"