c# - 如何为每个线程设置时区?

标签 c# .net multithreading datetime timezone

<分区>

我知道我们可以更改当前线程的当前文化。 我知道我们无法从 CurrentCulture 中获取 TimeZoneInfo 因为一种文化可能有多个时区 比如美国

但要使用相同的技术来处理当前线程的时区

如果我们能做出这样的东西就太好了:

TimeZone.CurrentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("timezone id");

最佳答案

不幸的是,“当前”时区的任何概念都与运行代码的机器的操作系统设置相关联。有一些用于更改时区的 Win32 api,但我不建议使用它们。它们不仅不是“线程安全的”,而且也不是“进程安全的”。时区设置会影响机器上运行的所有内容。

也就是说,我很好奇您的实际用例是什么。如果您可以为每个线程设置时区,那么您可能根本不依赖本地设置。您或许可以改用 TimeZoneInfo 上的转换方法。

例如,假设您要查找其他时区的当前时间。您可能正在寻找执行此操作的能力:

using (TimeZone.CurrentTimeZone = ...  )
{
    var now = DateTime.Now;
}

但是您应该在适当的地方简单地从 UTC 转换:

var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
                       DateTime.UtcNow, "some other timezone id");

关于c# - 如何为每个线程设置时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682438/

相关文章:

c# - (如何)调试会改变程序的工作流程?

c# - 从 picturebox C# 打印高质量的 Tiff 文档

c# - C# 中的方法覆盖

java - 如何限制创建的线程数并等待主线程直到任何一个线程找到答案?

c# - .gif 在整个循环结束之前不会动画?

c# - 如何更改 getFocus 上的文本框背景颜色

c# - 有没有更好的方法来处理跨语言的 double 值?

c# - 展开结果 View 将枚举 IEnumerable

c# - 关于反射和权限的快速问题。 .net 2008

c - 多线程 C 程序中的错误线程 ID?