【问题标题】:Check environments timezone settings检查环境时区设置
【发布时间】:2014-03-11 01:32:10
【问题描述】:

我希望能够检查环境时区设置,如果它不是美国时区,那么我将使用更全局的格式处理日期时间。例如。我在美国有一个用户,他们的设置现在是 MM-DD-YYYY 如果我在加拿大有另一个用户,他们想看到 DD-MM-YYYY 但我不只是给他们不同的版本,我宁愿有一些逻辑来抓住时区和将其与某物进行比较,然后确定如何处理日期时间。

if(System.TimeZone.StandardTime = US)
  {
   objOrderEntryItemUsageReport.VarShipDate = Convert.ToDateTime(datpkrShipDate.Value).ToString("MM/DD/YYYY"); 
  }
else
  {
   objOrderEntryItemUsageReport.VarShipDate = Convert.ToDateTime(datpkrShipDate.Value).ToString("DD/MM/YYYY");

我只是不知道检查环境时区设置的最佳方法,甚至不知道如何比较它以查看它是否为美国时区?

我是否需要创建一个包含美国时区的字典,然后在该字典中执行一个 while 循环以查看当前时区是否匹配,如果不匹配,则像国际用户一样处理它?

【问题讨论】:

    标签: c# .net winforms datetime


    【解决方案1】:

    用户的时区和用户的文化是完全不同的事情。

    不清楚这段代码在哪里运行,但基本上你想使用合适的CultureInfo,然后你可以使用DateTime.TryParse指定文化。您可以使用TryParseExact 为“短日期格式”指定标准格式d。 (同样,调用ToString...只需传递文化和d 的格式。)

    或者 - 并且最好 - 使用 DateTimePicker 这样您就不需要解析值 。 (根据您的姓名,您可能已经在使用 DateTimePicker,因此不清楚您为什么要调用 Convert.ToDateTime - Value property 已经属于 DateTime 类型。

    然后,以后也不要将其转换为字符串 - 您的 VarShipDate 属性不应该是字符串属性,它应该是 DateTime 属性。毕竟,这就是你想要表达的东西。尽可能避免字符串转换。它们容易出错,具有文化敏感性,而且基本上充满了潜在的失败。

    此外,我强烈建议不要使用System.TimeZone - 使用System.TimeZoneInfo,它实际上是TimeZone 的替代品。

    【讨论】:

    • 我将不得不检查 CultureInfo。我以前从未遇到过。
    • 好的,所以只是快速检查一下,我似乎可以检查 CultureInfo,如果它没有设置为 MM-DD-YYYY,那么我可以更改处理日期时间的方式正确吗?
    • @NitroFrost:不,你根本不应该指定MM-dd-yyyy。让 .NET 处理最佳格式,如果您甚至需要对其进行格式化。请参阅我编辑的答案 - 我强烈怀疑您根本不应该使用字符串解析或格式化。
    • 我确实有一个日期时间选择器。因此,在设计器中,我希望日期时间选择器的显示逻辑根据用户的本地情况进行更改。
    • @NitroFrost:设计师就是你在编码时看到的。您是指最终用户面前的 UI,对吧? .NET 应该会自动为您处理。您可以通过更改计算机的区域设置(观察系统时钟以查看更改生效)然后重新运行您的应用程序来测试它。
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2015-07-14
    相关资源
    最近更新 更多