使用不同的夏令时设置确定挂钟时间

时间:2014-08-04 21:14:13

标签: .net vb.net datetime

Windows 7 .Net 4

我有两台电脑。一个人的SupportsDaylightSavingTime为true,一个为false。请注意,两台PC在办公室中彼此相邻 - 只有一台PC被迫在标准时间全年运行。

无论日光设置如何,我都需要弄清楚当地的“挂钟时间”是什么。

以下是我迄今为止探讨此问题的代码:

Function TimeInfo() As String
    Dim s As String = My.Computer.Name & vbNewLine & "Now: " & Now() & vbNewLine
    s &= "UTC: " & Now.ToUniversalTime & vbNewLine
    s &= "Offset for Now(): " & TimeZone.CurrentTimeZone.GetUtcOffset(Now.ToShortDateString).Hours & vbNewLine
    s &= "UTC + Offset: " & Now.ToUniversalTime.AddHours(TimeZone.CurrentTimeZone.GetUtcOffset(Now.ToShortDateString).Hours) & vbNewLine
    s &= "SupportsDaylightSavingTime: " & TimeZoneInfo.Local.SupportsDaylightSavingTime & vbNewLine
    s &= "IsDaylightSavingTime: " & Now.IsDaylightSavingTime & vbNewLine
    Return s
End Function

这两台个人电脑的输出(在夏令时在太平洋沿岸生效)从两台电脑中取出约10分钟:

           PC3090-121
        Now: 8/4/2014 1:24:14 PM
        UTC: 8/4/2014 8:24:14 PM
        Offset for Now(): -7
        UTC + Offset: 8/4/2014 1:24:14 PM
        SupportsDaylightSavingTime: True
        IsDaylightSavingTime: True

           PC3090-114
        Now: 8/4/2014 12:39:09 PM
        UTC: 8/4/2014 8:39:09 PM
        Offset for Now(): -8
        UTC + Offset: 8/4/2014 12:39:09 PM
        SupportsDaylightSavingTime: False
        IsDaylightSavingTime: False

不幸的是,SupportsDaylightSavingTime会覆盖IsDaylightSavingTime,所以我无法从机器时间判断挂钟是否在白天。这就是所有后续的本地信息调用都被IsDaylightSavingTime强制修改为SupportsDaylightSavingTime为false。

我考虑使用网络IP来获取外部时间,但这看起来有点过分。当然,我应该可以在Windows 7 .Net 4上执行此操作。

我必须缺少一个TimeInfo属性/方法......在我正在使用的调用中,我无法看到如何找到本地时间。

2 个答案:

答案 0 :(得分:0)

工作类别:

    Dim dlt As System.Globalization.DaylightTime = TimeZone.CurrentTimeZone.GetDaylightChanges(Year(Now))
    Dim bDayLightTime As Boolean = (Now > dlt.Start And Now < dlt.End)
    Dim dtPostDate As Date = Now.ToUniversalTime
    If bDayLightTime Then
        dtPostDate = dtPostDate.AddHours(-7)
    Else
        dtPostDate = dtPostDate.AddHours(-8)
    End If

问题是AddHours()使用的时区偏移是硬编码的。

我想我可以只使用Now()并添加适当的偏移量 - 适用于固定差异,通常为1小时。

答案 1 :(得分:0)

您是否尝试过使用Noda时间? (http://nodatime.org/)。它处理了很多时区问题。基本上使.Net中的日期时间更适用于人们习惯于在现实生活中处理的方式(例如:从现在起2个月。从现在开始不是61天,除非是2月等。)