【问题标题】:Format date using DateTime.ToString() based on TimeZone基于 TimeZone 使用 DateTime.ToString() 格式化日期
【发布时间】:2020-04-04 08:02:34
【问题描述】:

我阅读了以下问题Creating a DateTime in a specific Time Zone in c# 并能够使用时区信息创建日期时间。但我需要将 DateTime 转换为基于 TimeZone 的字符串值。

例如我已将 TimeZone 设置为印度标准时间并创建了一个 DateTime,当我尝试使用 ToString() 而不是 13/12/2019 4:00:00 PM 转换为字符串时,我得到了 12/13/2019 4:00:00 PM。由于我已将 TimeZone 设置为印度标准时间,因此我想以印度格式 (dd/mm/yyyy) 而不是 mm/dd/yyyy 显示日期。

那么,如何在 C# 中根据 TimeZone 格式化日期?

编辑:我完全理解格式和时区是不同的东西。但我需要格式化 DateTime 以匹配用户的地理位置,我可以使用他提供的时区作为输入来识别。

【问题讨论】:

  • 时区是时区。文化决定日期/时间值的格式。
  • 您的CurrentCulture 到底是什么?您能否出示证明您的问题的minimal reproducible example
  • @SonerGönül 无论当前的文化如何,我都需要根据用户的输入更改 DateTime 格式。 TimeZone 将是用户的输入。
  • 我认为您基本上需要创建从时区 ID 到文化的映射,然后使用该文化的格式。但完全有可能存在一些跨越多种文化的时区,正是因为它们是不同的概念。我认为单独捕捉用户的文化会更好。
  • 一个时区有多种文化,这就是为什么(日期时间)格式是基于文化(不是时区)的原因

标签: c# date datetime timezone


【解决方案1】:

如果您只想要与特定文化匹配的DateTime 的字符串表示,您可以使用DateTime.ToString(IFormatProvider) 重载来指定要使用的目标文化。日期将被相应地格式化。如果要格式化日期和时间,则要根据用户的文化而不是时区来执行此操作。刚果和德国的人们共享相同的时区,但他们的日期和时间格式不同。

var myDate = DateTime.Now();
var myDateString = myDate.ToString(new CultureInfo("fr-FR"));

例如以法语格式打印日期和时间。

您还可以使用自定义格式格式化您的 DateTime

var myDate = DateTime.Now;
var myDateString = myDate.ToString("dd/MM/yyyy hh:mm");

参考:
- DateTime.ToString(IFormatProvider)
- DateTime.ToString(string)
- CultureInfo
- Date and time formatting

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多