我正在解决一个问题,需要获取另一个时区的当前日期和时间。我不知道我的代码将在哪个时区运行,并且它需要在Windows和Linux机器上正常工作。
我还没有找到任何方法来实现这一点。有什么想法吗?
(附注: 我需要找出在瑞典是什么时间,包括夏令时,从代码可能运行的任意时区).
我正在解决一个问题,需要获取另一个时区的当前日期和时间。我不知道我的代码将在哪个时区运行,并且它需要在Windows和Linux机器上正常工作。
我还没有找到任何方法来实现这一点。有什么想法吗?
(附注: 我需要找出在瑞典是什么时间,包括夏令时,从代码可能运行的任意时区).
瑞典的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);
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Europe/Stockholm");
DateTimeOffset currentTimeInSweden = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzi);
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Europe/Stockholm");
DateTimeOffset currentTimeInSweden = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzi);
注意,代码运行所在的时区并不重要,也不应该重要。仅瑞典的夏令时规则是相关的,而不是代码可能运行的时区的夏令时规则。
最后,请注意如果您希望得到有效的结果,则必须正确设置计算机的时钟。始终使用NTP或操作系统的“自动设置日期和时间”功能将计算机时钟与互联网同步。
Now
或UtcNow
方法准确获取当前时间,则始终使用操作系统的“自动设置日期和时间”(NTP)功能。如果由于某种原因您不能依赖系统时钟,则必须从某个您信任的服务器获取当前时间。您可以在代码中实现NTP客户端,或者从Web服务器获取当前时间(如果您不需要太精确)。 - Matt Johnson-PintEurope/London
(服务器可以位于世界任何地方),而我们的业务位于法国。我觉得混淆是因为您变量名称 currentTimeInSweden
的名称。我本来期望本地时间是瑞典的,但实际上它仍然设置为当前机器的时间。无论如何,后来我发现属性DateTime
提供了正确的日期和时间,所以没问题了。感谢您的答案,抱歉之前给您点了踩。 - Jérôme MEVELcurrentTimeInSweden
确实是瑞典的正确时间,表示为DateTimeOffset
。访问DateTime
属性将仅删除偏移量并将结果的Kind
属性设置为Unspecified
。日期和时间将保持不变。此外,只要计算机的时钟设置正确,该代码将在世界上任何地方的计算机上提供相同的输出。 - Matt Johnson-PintConsole.WriteLine(DateTime.UtcNow)
,那么它应该始终与此处显示的时间对齐:https://www.timeanddate.com/worldclock/timezone/utc - Matt Johnson-Pint