2013-10-10 44 views
1

我从网站中找到以下代码(对不起,我现在不记得现在的引用),但是,它给了我当前时区偏移量为我的电脑。因此,例如,此代码:如何获得正确的时区偏移(从夏令时开始)

Dim plusminus As String = If((tz.Hours > 0), "+", "-") 
Dim NewTimeZone As String = String.Format("{0}{1:00}:{2:00}", plusminus, Math.Abs(tz.Hours), tz.Minutes) 

给我'+09:30'作为输出。这是完美的。但是,由于夏令时已经发生影响,现在相同的代码给了我'+10:30',这实际上是不正确的。

有人可以advsise用于检索正确的偏移量(无论是在和夏令时的时间),并以相同的格式返回一个更好的方法:事先(+09 30)

感谢

+0

你是依靠对字符串类型,因此没有什么可以做(除了硬编码许多修改参数,如你所愿)。处理日期/时间时的逻辑事项依赖于日期/时间类型。如果你使用适当的类型,你会有不同的选择;例如,依靠不同的时区(DayLight Savings是给定类型的属性之一):http://msdn.microsoft.com/en-us/library/bb397769.aspx – varocarbas

+0

目前还不清楚你在问什么。你只显示字符串格式化代码 - 而不是你如何获得'tz'变量。 “正确”是什么意思?你说+10:30是“不正确的”,因为它具有DST - 但大多数人会说*不*应用DST将是不正确的。你的用例是什么? –

回答

3

如果我理解正确,您想查找UTC和当前时间之间的差异,而不考虑夏令时?

如果我是正确的,那么下面会做你想要什么:

Dim tzi As TimeZoneInfo = TimeZoneInfo.Local 
Dim offset As TimeSpan = tzi.BaseUtcOffset 
Dim plus As String = If(offset.TotalMinutes >= 0, "+", "") 
Dim newTimeZone As String = String.Format("{0}{1:00}:{2:00}", plus, offset.Hours, offset.Minutes) 

输出+00:00我的机器上(我的本地时间为UTC + 1,但我们是在DST目前)

+0

完美的感谢! – Riples