【问题标题】:Format DateTime to local string with a timezone将 DateTime 格式化为带有时区的本地字符串
【发布时间】:2018-01-23 07:17:27
【问题描述】:

我需要能够以不同格式获取当前日期作为字符串。

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var utcNow = DateTime.UtcNow;
var localTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, timeZone);
Console.WriteLine(localTime.ToShortDateString());

上面的示例将日期打印为22-01-2018,这是丹麦格式。但我需要它将日期打印为1/22/2018(仅作为示例)。

我知道我可以使用ToString 格式化日期,但我需要能够格式化一系列不同时区的日期(用户选择时区)。

我可以告诉ToShortDateString 使用另一种文化吗?如果可以,我如何从TimeZoneInfoCultureInfo

【问题讨论】:

  • 您可以更改当前线程或整个应用程序的文化。见:stackoverflow.com/questions/468791/…
  • @ThomasVoß 为什么?您可以简单地将其作为参数提供给 DateTime.ToString(...) 而无需更改线程/应用程序的 all 方面。如果您想拥有一个全球应用程序,那么您的应用程序更适合,它完全设置为一种 TZ/文化或另一种,而不是针对不同文化的输出
  • 我不确定从时区到首选日期格式是否存在可靠的现实世界映射。 This article 讨论如何进行文化特定的格式化,但可能无法从 TZ 推断文化。

标签: c# .net datetime timezone


【解决方案1】:

很遗憾,您不能直接将TimeZoneInfo 转换为CultureInfo

问题在于,在任何给定的时区都有许多国家属于该时区,因此许多不同的文化背景

Jon Skeet 的精彩 Noda Time 包含国家/地区代码 -> 时区映射,因此您可以使用它来了解哪些国家/地区位于您的给定时区。但从那里,你将不得不以某种方式选择目标国家。

【讨论】:

    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多