有人可以指出我所期望的id所引用的所有时区的完整列表TimeZoneInfo.FindTimeZoneById()吗?我无法在任何地方找到列表,我查看了.NET文档.
问题:我需要在不同时区的特定时间在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实例,这似乎不像我预期的那样工作.
知道如何让它工作吗?
我有一个生成vCal和iCal文件的页面,可以将事件导入Outlook和iCal.这些邮件客户端(Outlook和iCal)将接收UTC中的日期,因为他们知道用户的偏移量并将处理正确的时间.我们编写此代码的客户端基于美国东部时区,我也是.我们的主机位于中部时区(距离东部1小时).我想让代码处理这个没有任何硬编码的偏移量.我的代码目前从我们的CMS获得DateTime并转换为UTC for Outlook/iCal.这意味着CMS的DateTime值相对于托管位置:
// Start Date Time
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
Run Code Online (Sandbox Code Playgroud)
当我在本地运行时,一切都很好,因为CMS中的DateTime基于我们客户端的东部时区,所以我是,所以进程是东部 - > UTC - >进入Outlook然后进入UTC - >东部一切都很好.当我在Central中部署到服务器时,来自CMS的DateTime距离Eastern一小时.如何在转换为UTC之前自动从东方获取偏移并添加它?我显然需要这个来处理标准时间(EST)和日光时间(EDT).我想以编程方式执行它而不使用硬编码值,因此无论您处于什么时区,它都能正常工作.即如果我将此代码交给某人在印度进行开发,它应该自动处理其本地服务器的偏移量和相应调整.
我需要做这样的事情,我在转换为UTC之前将偏移应用到东部时间:
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ApplyEasternOffset().ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果这是之前讨论过的主题,我只是不确定找到这样的问题的最佳条款.提前致谢.