首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得不同时区的当前UTC偏移量?

如何获得不同时区的当前UTC偏移量?
EN

Stack Overflow用户
提问于 2014-06-05 20:45:04
回答 2查看 4.8K关注 0票数 4

问题:我需要在UTC上的服务器上执行不同时区中特定时间的任务。例如,我想在太平洋时间上午9:00执行,而不考虑夏令储蓄的变化。

我有什么?我检查了时区的枚举

代码语言:javascript
复制
var infos = TimeZoneInfo.GetSystemTimeZones();
foreach (var info in infos)
{
    Console.WriteLine(info.Id);
}

例如,我只能看到太平洋时间的“太平洋标准时间”,如果我这样做,

代码语言:javascript
复制
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").GetUtcOffset(DateTime.UtcNow)

我得到-07:00:00作为输出,但现在偏移量是-08。这意味着它不考虑日光的变化。

我计划根据上面得到的偏移量创建一个DateTime实例,这似乎不像我预期的那样有效。

而且,我不能使用像NodaTime这样的框架

知道我怎么能让它起作用吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-05 20:48:11

你可能在寻找这样的东西:

代码语言:javascript
复制
var chinaTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"));
var pacificTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));

传递给FindSystemTimeZoneById的字符串是从TimeZoneInfo.GetSystemTimeZones()中选择的。

更新:清理代码

票数 2
EN

Stack Overflow用户

发布于 2014-06-05 20:56:26

您已经得到了您的答案,使用TimeZoneInfo.GetUtcOffset并向DateTime传递DateTimeKind.Utc将有效。

我得到-07:00作为输出,但现在偏移量是-08。这意味着它不考虑日光的变化。

实际上,-7确实是当前的偏移量,因为太平洋时间目前正在使用夏令时。在冬季,偏移量恢复到-8,这是标准偏移量。我想你只是把它们倒过来了。

另外,请记住,Id对象的TimeZoneInfo属性是整个时区的标识符。其中一些是误导性的,比如"Pacific Standard Time" --这会让你相信它只使用太平洋标准时间,但实际上它代表了整个北美太平洋时区--包括太平洋标准时间和太平洋夏令时。在适当的过渡阶段,它将相应地切换偏移量。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24069938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档