Apply DateTime offset to US Eastern Timezone
我有一个生成vCal和iCal文件的页面,可以将事件导入Outlook和iCal。这些邮件客户端(Outlook& iCal)将接收UTC中的日期,因为他们知道用户的偏移量并将处理正确的时间。我们编写此代码的客户端基于美国东部时区,因此我是I.他们的主机位于中部时区(距离东部1小时)。我想让代码处理这个没有任何硬编码的偏移量。我的代码目前从我们的CMS获得DateTime并转换为UTC for Outlook / iCal。这意味着CMS的DateTime值相对于托管位置:
1 2 3 | // Start Date Time sb.AppendFormat("DTSTART:{0} ", thisEvent.StartDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ")); |
当我在本地运行时,一切都很好,因为CMS中的DateTime基于我们客户端的东部时区,所以我是,所以进程是东部 - > UTC - >进入Outlook然后进入UTC - >东部一切都很好。当我在Central中部署到服务器时,来自CMS的DateTime距离Eastern一小时。如何在转换为UTC之前自动从东方获取偏移并添加它?我显然需要这个来处理标准时间(EST)和日光时间(EDT)。我想以编程方式执行它而不使用硬编码值,因此无论您处于什么时区,它都能正常工作.I.e。如果我将此代码提供给某人在印度进行开发,它应该自动处理其本地服务器的偏移量并相应地进行调整。
我需要做这样的事情,我在转换为UTC之前将偏移应用到东部时间:
1 2 | sb.AppendFormat("DTSTART:{0} ", thisEvent.StartDate.ApplyEasternOffset().ToUniversalTime().ToString("yyyyMMddTHHmmssZ")); |
很抱歉,如果这是之前讨论过的主题,我只是不确定找到这样的问题的最佳条款。提前致谢。
查看TimeZoneInfo类。 它具有获取任何时区的UTC偏移的方法。
http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx
另外,请查看以前的帖子:如何使用TimeZoneInfo在夏令时期间获取当地时间?
这是一个显示从Pacfic到Eastern的转换的示例:
1 2 3 | var eastern = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); var local = TimeZoneInfo.Local; // PDT for me Console.WriteLine(DateTime.Now.Add(eastern.BaseUtcOffset - local.BaseUtcOffset)); |
当我的本地时钟显示9:05:31时显示4/4/2011 12:05:31。
您可以使用TimeZoneInfo类。
看一下这个样本:
1 2 3 4 | TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); TimeSpan offset = tzi.GetUtcOffset(DateTime.Now); DateTime testDateTime = DateTime.Now.Add(offset); |