【问题标题】:How do I get local time in another timezone in dot net core如何在 dot net core 中获取另一个时区的当地时间
【发布时间】:2020-10-26 11:22:43
【问题描述】:

我正在解决一个问题,我需要在另一个时区获取当前日期和时间。我不知道我的代码将在哪个时区运行,它需要在 windows 和 linux 机器上运行。

我还没有找到任何方法来做到这一点。有什么想法吗?

(PS:我特别需要找出瑞典的时间,包括代码可能运行的任意时区的夏令时)。

【问题讨论】:

  • 我通常使用 UTC 作为我所有的 DateTime 时间戳。如果你想找出特定时区的时间,你可以看看使用内置的时区转换方法。您可以用 UTC 记录时间,然后根据需要进行转换。这是文档部分的链接。您必须阅读它,并且您可能必须创建自己的 TimeZoneInfo 类。 docs.microsoft.com/en-us/dotnet/api/…
  • 我有所有时间戳的 UTC 时间,我需要一个消息模板,其中包括发送给客户端的当前时间。时间应该是他们当地的时区,而不是 UTC。到目前为止,我还没有找到任何方法将 UTC 时间转换为 dot net core 中的另一个时间。你在寻找它时发现的只是一堆关于它在 Windows 和 linux 上的工作方式不同的帖子

标签: c# .net-core timezone datetimeoffset


【解决方案1】:

瑞典的 IANA 时区 ID 是 "Europe/Stockholm"(用于 Linux、OSX 和其他非 Windows 平台)。瑞典的 Windows 时区 ID 是 "W. Europe Standard Time"

因此,您可以执行以下操作:

// Determine the time zone ID for Sweden
string timeZoneId = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
    ? "W. Europe Standard Time"
    : "Europe/Stockholm";

// Get a TimeZoneInfo object for that time zone
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);

// Convert the current UTC time to the time in Sweden
DateTimeOffset currentTimeInSweden = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzi);

如果需要,您可以使用我的 TimeZoneConverter 库来简化此操作,它允许您在任何平台上使用任一 id。

TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Europe/Stockholm");
DateTimeOffset currentTimeInSweden = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzi);

还要注意,代码运行的时区不相关,也不应该相关。 瑞典的夏令时规则是唯一相关的,与可能运行代码的时区无关。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2014-07-21
  • 2012-02-27
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
相关资源
最近更新 更多