0

如何获取不是基于我的 PC 时间的时间?我使用下面的代码来获取时间并且它可以工作,但是当我更改我的计算机时间时,时间不再正确,那么有没有办法我可以获得实际的实时时间而不是从 PC 时间?也许GPS时间?

    private void btn_DateTime_Click(object sender, EventArgs e)
    {
        DateTime dateTime = DateTime.Now;
        label_localTime.Text = dateTime.ToString();
        DateTime utcNow = DateTime.UtcNow;
        label_utc.Text = utcNow.ToString();


        TimeZone timeZone = TimeZone.CurrentTimeZone;
        if (timeZone.IsDaylightSavingTime(dateTime) == true)
        {
            label_dayLightSaving.Text = "YES";
            label_timeZone.Text = timeZone.GetUtcOffset(dateTime).ToString();
        }
        else
        {
            label_dayLightSaving.Text = "NO";
            label_timeZone.Text = "N//A";
        }                                  
    }

编辑:目标设备在 WM6 上运行,并且具有 GPS 硬件。

谢谢。

4

5 回答 5

7

听起来您正在寻找网络时间服务器。除非您有本地硬件(GPS 接收器、原子时间收音机)来支持其他方法,否则网络时间是您最好的选择。

网络时间协议 (NTP) 是一种用于在分组交换、可变延迟数据网络上同步计算机系统时钟的协议。

这是使用 C# 的客户端实现;它可能会有所帮助。

于 2009-07-09T17:12:25.320 回答
1

您可以使用ntp,但访问不在运行程序的计算机上的时间源并且在给定时间段内访问第 1 层或第 2 层服务器的次数过多可能会令人不悦。

于 2009-07-09T17:10:02.953 回答
0

如果您可以访问 GPS 串行流,则其中一个句子具有 GMT/UTC 时间。

更新: $GPRMC 语句就是其中之一。 http://www.codepedia.com/1/The+GPRMC+Sentence

$GPRMC,UTC,POS_STAT,LAT,LAT_REF,LON,LON_REF,SPD,HDG,DATE,MAG_VAR,MAG_REF*CS

于 2009-07-09T22:54:43.740 回答
0

还有一些 Win32 API 可以获取未校正的 CPU 时间,您必须自行本地化。

当在 Win32 平台上运行嵌入式 GPS 系统时,我们可以在运行时获取 GPS 时间并校正本地 PC 时间。因此,对于日志记录,我们只使用本地 Windows 时间,但对于计时器,我们使用不正确的 CPU 时间,以避免在系统时间更改时计时器运行时间过短或过长。

于 2009-07-09T22:36:44.620 回答
0

由于 DateTime 基于您的 CPU 时钟和您的计算机内部时钟,因此您无法获得不基于您的 CPU 或计算机时间的 DateTime。

最好的方法是找到一个可以调用的 Web 服务,例如Navy Master Clock

我不知道是否有网络服务,但你可以从网站上得到它。

于 2009-07-09T17:08:55.387 回答