问题:我需要在不同时区的特定时间在UTC上的服务器上执行任务.比方说,我想在太平洋时间上午9点执行,而不管日期灯光的变化.
我有什么?我通过这样做检查了时区的枚举
var infos = TimeZoneInfo.GetSystemTimeZones();
foreach (var info in infos)
{
Console.WriteLine(info.Id);
}
Run Code Online (Sandbox Code Playgroud)
例如,我只能在太平洋时间看到"太平洋标准时间",如果我这样做,
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").GetUtcOffset(DateTime.UtcNow)
Run Code Online (Sandbox Code Playgroud)
我得到-07:00:00了输出,但截至目前,偏移量是-08.这意味着它不考虑日光变化.
我正在计划根据我上面的偏移量创建一个DateTime实例,这似乎不像我预期的那样工作.
知道如何让它工作吗?
你已经有了答案,使用TimeZoneInfo.GetUtcOffset和传递一个DateTime有DateTimeKind.Utc意志的工作.
我得到-07:00:00作为输出,但到目前为止偏移是-08.这意味着它不考虑日光变化.
实际上,-7确实是当前的偏移量,因为太平洋时间目前正在使用夏令时.在冬季,偏移量将恢复为-8,这是标准偏移量.我想你只是让他们倒退了.
另外,请记住,对象的Id属性TimeZoneInfo是整个时区的标识符.其中一些是误导性的,比如"Pacific Standard Time"- 这会让你相信它只使用太平洋标准时间(PST),但实际上它代表整个北美太平洋时区 - 包括太平洋标准时间和太平洋夏令时.它将在适当的转换处相应地切换偏移.