为什么我设置了CurrentCulture后时区没有改变?

7
根据我的研究,无法更改线程的时区。因此,我的问题是为什么不能更改?
我本以为将应用程序的文化切换到特定国家也会切换该功能,这似乎是预期行为。 编辑 经过修订,我可以看出为什么默认情况下可能不应该进行1:1映射。但是,我仍然认为能够按线程更改时区是一个不错的功能。

+1 对于“我仍然认为能够按线程更改时区将是一个不错的功能” - Wahid Bitar
2个回答

10

它们不是1:1,因此它们实际上并没有连接。如果将当前区域设置为en-US,那么它是哪个时区?:)

有几个国家拥有多个时区,因此设置区域(其与国家无关),实际上与时区没有太大关系。


+1 好观点!从这个角度考虑我从未想过。不过,对于那些没有多个时区的人来说,这样做不是一个好主意吗? - James
1
@James - 不行 :) 在API中,你应该始终选择一致的行为方式,而不是“在某些情况下如果可能则这样做”,这会引发麻烦和客服呼叫。 可预测性>尽可能多地做 - Nick Craver
如果CurrentCulture有一个重载,带入时区ID的话,那就太好了 :) - James
@James - 扩展方法! :) - Nick Craver

4

文化和时区是两回事。假设你是一名南非公民,在美国纽约工作。显然,你想要将自己的时区设置为东部标准时间(GMT-5),因为那是你所在的地方;但是,从你的建议中可以看出,如果你还将文化设置为“af-ZA”,那么这样做会自动更改你的时区为格林威治标准时间+2小时。


是的,在修改后,我意识到它们可能不应该默认映射。然而,如果您也可以设置线程的时区,那就太好了。 - James
@James:确实会很不错。当然,解决这个问题还有其他方法。例如,您的应用程序可以维护自己与UTC的偏移量——在运行时可以修改——并在所有需要时间的地方使用此偏移量? - Dan Tao
目前我已经有了一个解决方案,并且正在动态进行时区转换。只是觉得如果我可以按线程更改时区并完全消除转换,那么会更容易些。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接