我有以下情形:阅读DateTime对象
美国:数据库&应用服务器
欧洲:客户
服务器读取日期时间(例如12:00)从数据库中提取对象并将其发送给欧洲的客户端。现在的问题是,客户端在客户端的时区(例如18:00)中显示此日期时间,但我们需要数据库中的时间,而与服务器的时区无关。在客户端,我们不知道这个值来自哪个时区。
那么我们该如何实现呢?
我有以下情形:阅读DateTime对象
美国:数据库&应用服务器
欧洲:客户
服务器读取日期时间(例如12:00)从数据库中提取对象并将其发送给欧洲的客户端。现在的问题是,客户端在客户端的时区(例如18:00)中显示此日期时间,但我们需要数据库中的时间,而与服务器的时区无关。在客户端,我们不知道这个值来自哪个时区。
那么我们该如何实现呢?
您的标签告诉答案。
使用TimeZone类。
http://msdn.microsoft.com/en-us/library/system.timezone.touniversaltime.aspx
也:Creating a DateTime in a specific Time Zone in c# fx 3.5
所以在你的数据库,时间应该是UTC。从那里你可以做任何你想做的事情。
TimeZone已过时 - TimeZoneInfo是你的朋友。 – 2010-09-17 12:07:25
以及我链接到您的帖子:) – Stefanvds 2010-09-17 12:13:49
难道你不能简单地使用DateTime.ToUniversalTime()
?
http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx
或者,如果你不想UTC,你可以找到你的服务器的时区,并做一些事情,如:
DateTime dt;
TimeZoneInfo timezone_EST =
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt_EST = TimeZoneInfo.ConvertTime(dt, timezone_EST);
这种方法的问题是,我将不得不迭代通过10k行的数据集表来做到这一点。 – Enyra 2010-09-17 12:20:18
如果你存储SQL DateTime数据2008年,看看新的datetimeoffset类型,它将存储时区信息以及日期和时间本身
它不存储时区信息。它存储当时UTC的偏移量。那些*非常*不同的东西。给定一个UTC时间和一个时区,我会知道当地时间是五分钟后。给定UTC瞬间和偏移量,我不会。 – 2010-09-17 12:10:43
不幸的是,它现在还不支持SQL 2005。 – Enyra 2010-09-17 12:18:46
相关问题:http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-最佳做法 – Oded 2010-09-17 12:07:32