C# 如何确定存储为哪个区域性DateTime对象?

C# 如何确定存储为哪个区域性DateTime对象?,c#,datetime,cultureinfo,C#,Datetime,Cultureinfo,或者这可能吗 作为一个附带问题,这个问题对我来说之所以存在,是为了理解当用户在运行时更改Windows区域性设置时DateTime对象会发生什么情况 当用户在运行时更改Windows区域性设置时,DateTime对象会发生什么变化 没什么。DateTime的任何现有值都将保持不变 DateTime对象始终假定为本地时间 否。DateTime值可以是“本地”值、“UTC”值,也可以是“未指定”类型的值 我只是不明白为什么date.ToLocalTime().ToLocalTime()只更改一次值

或者这可能吗

作为一个附带问题,这个问题对我来说之所以存在,是为了理解当用户在运行时更改Windows区域性设置时DateTime对象会发生什么情况

当用户在运行时更改Windows区域性设置时,DateTime对象会发生什么变化

没什么。
DateTime
的任何现有值都将保持不变

DateTime对象始终假定为本地时间

否。
DateTime
值可以是“本地”值、“UTC”值,也可以是“未指定”类型的值

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

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

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

  • 当用户在运行时更改windows区域性设置时,DateTime字段的值从未更改

  • 不,我们不能假定DateTime值为本地时间


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