且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用C#将时间转换到指定的时区?

更新时间:2023-10-22 13:39:58

只有偏移量以及夏令时是否不足以指示时区:可以有几个时区具有相同的标准偏移量和DST偏移量,但是在不同时间具有DST转换。



这些数据是否已在数据库中,或者是还在设计吗理想情况下,您应该存储时区ID - TimeZoneInfo 适用于Windows ID,这不是理想的IMO(我喜欢其他业界倾向于使用的IANA / Olson ID),但至少它代表一个实时时区。



一旦你有一个 TimeZoneInfo 和你要转换的瞬间, a href =http://msdn.microsoft.com/en-us/library/system.timezoneinfo.converttimefromutc(v=VS.90).aspx =nofollow noreferrer> ConvertTimeFromUtc ConvertTimeToUtc 可能是你以后的 - 但要小心你的意思是任何日期时间值;你需要确保你总是知道你所代表的是什么。



BCL在所有这一切上都有些毛病,这是我开始的原因之一href =http://nodatime.org =nofollow noreferrer> Noda Time ,允许使用IANA时区数据以及BCL。


I'm working on an application in C# with .Net 3.5. I have time zone value of the User is stored in DB with this format (-05:00,1), where -5.00 represents EST time zone value and the 1 indicates that this time zone follows daylight saving (if 0 not a daylight saving zone).

Now I want to convert any date time value into this timezone value considering the daylight saving value.

Any help is appreciated. Thanks

Having just an offset and whether or not it's in daylight saving time isn't really enough to indicate a time zone: there can be several time zones with the same standard offset and DST offset, but which have DST transitions at different times.

Is this data already in the database, or are you still designing it? Ideally you should store a time zone ID - the ones TimeZoneInfo works with are Windows IDs, which isn't ideal IMO (I prefer the IANA/Olson IDs that the rest of the industry tends to work with) but at least it does represent a real time zone.

Once you've got a TimeZoneInfo and an instant that you want to convert, ConvertTimeFromUtc and ConvertTimeToUtc are probably what you're after - but be careful about what you mean by "any date time value"; you need to make sure you always know exactly what you're representing.

The BCL is somewhat woolly on all of this, which is one of the reasons I started Noda Time, which allows use of the IANA time zone data as well as the BCL.