如何获得不基于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硬件。
感谢。
答案 0 :(得分:7)
听起来你正在寻找网络时间服务器。除非你有本地硬件(GPS接收器,原子时间无线电)来支持其他方法,否则网络时间是你最好的选择。
网络时间协议(NTP)是一个 用于同步时钟的协议 计算机系统 分组交换,可变延迟数据 网络
答案 1 :(得分:1)
您可以使用ntp
但是访问运行该程序的计算机上没有的时间源并且在给定时间段内访问第1层或第2层服务器的次数可能不受欢迎需要花费时间。
答案 2 :(得分:0)
由于DateTime基于CPU时钟和计算机内部时钟,因此无法根据CPU或计算机时间获取DateTime。
最好的方法是找到一个可以调用的网络服务,例如Navy Master Clock。
我不知道是否有网络服务,但你可以从网站上获得它。
答案 3 :(得分:0)
还有Win32 API可以获得未经校正的CPU时间,您必须将自己本地化。
当在Win32平台上运行嵌入式GPS系统时,我们在运行时获得GPS时间并纠正本地PC时间。因此,对于日志记录,我们只使用本地Windows时间,但对于计时器,我们使用不正确的CPU时间,以避免在更改系统时间时计时器短时间或长时间运行。
答案 4 :(得分: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