【问题标题】:How to determine on which culture DateTime object is stored as?如何确定将 DateTime 对象存储为哪种文化?
【发布时间】:2015-11-07 01:48:33
【问题描述】:

或者这甚至可能吗?

作为一个附带问题,这个问题对我来说存在的原因是要了解当用户在运行时更改 Windows 文化设置时 DateTime 对象会发生什么?

【问题讨论】:

  • 什么意思? DateTime 值没有文化。如果根据特定的文化对其进行格式化,则不再有 DateTime 值。你有一个string 值。自然地,string 值没有报告用于创建它们的文化的机制。您必须单独存储文化信息。你到底在这里问的是什么?
  • 我可以看到我的问题有点不清楚,对此感到抱歉。那么 DateTime 对象总是被假定为本地时间吗?我只是不明白为什么 date.ToLocalTime().ToLocalTime() 只更改一次值?
  • DateTime.SpecifyKind 允许您指定它是本地或 UTC。 ToLocalTime() 会将 UTC 时间转换为本地时间。
  • 所以我实际上在运行时测试了它会改变的方式,似乎为了让它根据系统时间获取一个新的 LocalTime 以进行正确的转换,你必须实例化一个新的DateTime 对象,以便 DateTime 对象可以在创建时获取系统的属性。不过,这并没有经过彻底测试,只是我从非常粗略的粗略测试中获得的快速结果。我删除了我的答案,因为我的发现与它相矛盾。
  • PS 使用DateTimeOffset,在很多方面都更好。

标签: c# datetime cultureinfo


【解决方案1】:

当用户在运行时更改 Windows 文化设置时,DateTime 对象会发生什么情况?

什么都没有。 DateTime 的任何现有值都不会改变。

DateTime 对象总是假定为本地时间?

没有。 DateTime 值可以是“本地”值、“UTC”值或“未指定”种类的值。

我只是不明白为什么 date.ToLocalTime().ToLocalTime() 只更改一次值?

DateTime 上在两者之间进行转换的方法检查当前值代表的DateTime 值的类型。如果当前值已经是所请求的类型,则该方法只返回当前值。

因此,一旦您调用了ToLocalTime(),您现在就有了一种“本地”类型的DateTime,如果您再次调用ToLocalTime(),您将获得相同的值。

【讨论】:

    【解决方案2】:
    1. 当用户在运行时更改 Windows 文化设置时,DateTime 字段的值永远不会改变。

    2. 不,我们不能将 DateTime 值假定为本地时间。

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多