如时区标签wiki中所述,有两种不同的时区样式.
Microsoft提供的用于Windows和.Net TimeZoneInfo类的那些由诸如的值标识"Eastern Standard Time".
IANA在TZDB中提供的内容由诸如此类的值标识TimeZoneInfo.
许多基于Internet的API使用IANA时区,但由于多种原因,可能需要将其转换为Windows时区ID,反之亦然.
如何在.Net中实现这一目标?
我知道DateTimeOffset存储UTC日期/时间和偏移量.我也从MSDN博客文章中了解到,DateTimeOffset应该用于"使用夏令时".
我正在努力理解的是DateTimeOffset"夏令时"的工作原理.我的理解,很少有,是夏令时是一个政治决定,不能从纯粹的抵消中推断出来.如果它只存储一个偏移,那么这个结构对DST是否友好呢?
我认为可能有一种方法可以将TimeZoneInfo类与DateTimeOffset结合使用.我该怎么办?
最后,有什么更好的方法可以实现以下目标吗?
(我看过Jon Skeet关于Noda-Time的一些帖子,但我认为它还没有准备好生产,我不知道它是否能很好地融入我们现有的解决方案).
这是我们的场景.该服务器是出于在英国时间运行的不幸遗留原因.我们的客户开始从澳大利亚投入运营,其中有多个时区.其他国家可以随时投入使用.
我们有一个基于Hardcodet调度程序的调度程序(使用DateTimeOffset).它工作得很好.但是,在我们的数据库中,我们只存储足够的数据来构造DateTime对象(见下文),在我们的子类和管道代码中我们只使用DateTime,因为最初我们只支持英国用户.
该调度程序负责固定和动员工厂设备.因此,预定事件在用户的DST调整后的当地时间运行至关重要.
用户在我们的网站上输入时间表; 目前,它作为星期几,小时和分钟存储在数据库中.当读取数据时,我们为该日,小时和分钟的下一次出现创建一个DateTime对象.我可以自由地改变db结构以另外存储偏移量或时区.
当该日期和时间到达时,调度程序发送命令(并重试一段时间).它然后在下周的同一天和时间再次运行(虽然该服务实际上已经被回收,然后代码将再次运行).
我需要实现的是使用从Hardcodet子类调度的调度程序在该时区调整的本地日期和时间触发调度事件.如果DateTimeOffset确实是DST感知的,那么我需要做的就是存储一个偏移并改变我们的管道代码以使用这个结构,但我得到的印象并不是那么简单.(我们或许可以从工厂的GPS位置获取当前时区,但这是另一天的讨论:)).
我有一个带有time_zone参数的 JSON 文件。它具有诸如等值London, Casablanca, Arizona, Pacific Time (US & Canada)。基于time_zone,我想获得该DateTime时区的结果。
例如,
Current time = 8/3/2015 4:00:00 PM
If time_zone = Central Time (US & Canada) then result should be 8/3/2015 3:00:00 PM,
If time_zone = Pacific Time (US & Canada) then result should be 8/3/2015 1:00:00 PM,
If time_zone = London then result should be 8/3/2015 9:00:00 PM 等等。
我想显示当前时间以及每个给定时区的时间。
我尝试了以下方法来为受尊重的时区争取时间,但它引发了错误。
代码:作品
DateTime timeUtc = DateTime.Now;
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"); …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个表来将所有Olson TZID转换为Windows时区.我已经找到:
哪个很棒,可以根据以下信息构建:
http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
但不幸的是,它只将一些TZID映射到Windows时区.有人遇到(或制作过)一张完整的桌子吗?
我正在使用NodaTime,因为它对zoneinfo数据有很好的支持,但我有一个案例需要将其DateTimeZone转换TimeZoneInfo为在Quartz.NET中使用.
这里推荐的方法是什么?IANA在Windows时区和zoneinfo时区之间有一个映射文件,我可以创建一个利用此信息的扩展方法吗?
谢谢,迪恩
我有一个由C#后端和Java前端组成的系统.的C#后端与其他系统和一些移动设备进行通信.
在C#方面,我的任务是识别来自移动设备的时间戳的时区并创建相应的TimeZoneInfo对象.这没有任何问题.
在Java方面,我必须显示时区信息以及移动设备发送的数据.我正在使用TimeZone该类在我的域对象中存储时区信息.
现在的问题是我如何创建一个Java的TimeZon,其与对应ê对象C#的TimeZoneInfo对象?AFAIK时区没有任何唯一ID.此外,名称也不同(例如在C#中:" Central Europe Standard Time",在Java中 " Central Europe Time").甚至C#和Java中的时区数量都不相同!
我有一个输入:
我需要将时间转换为另一个奥尔森时区(美国/洛杉矶)
.net 或 nodatime 中进行该转换的最佳方法是什么?我基本上是在 C# 中寻找与此方法等效的方法:
var timeInDestinationTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(CurrentSlot.Date, TimeZoneInfo.Local.Id,
room.Location.TimeZone.TimeZoneName);
Run Code Online (Sandbox Code Playgroud)
但上面的 .Net 方法仅适用于 Windows 时区名称(并且我有 Olson 名称)