電腦走時比北京時間快之如何設定系統時間

2021-07-14 22:48:55 字數 2117 閱讀 9510

問題描述:

設定公司裝置電腦工控機的時間與北京時間一樣,過了一段時間後就比北京時間快了,乙個鐘頭左右,快了15分鐘左右

腦子開始高速運轉其起來:

於是乎就開始懷疑問題的原因所在,cmos的時間有問題?電腦中毒了?

問題是同款產品的工控機都有此問題,而其它產品的同款工控機卻沒有,於是乎排除cmos的時間問題(當然有懷疑是這個批次的工控機可能出了問題,問題是這家公司做的這款工控機很穩定啊,到此,先暫不考慮是工控機cmos的問題);

排除法,好,有毒,那就防毒,防毒了,依舊如此;苦思不得其解時,想到了裝置還連線了資料庫,是不是資料庫引起的呢?

後來發現是連線資料庫的軟體上,在root前線上呼叫了windows的介面函式設定了電腦系統時間,同事說,這是為了保持每台裝置上的時間保持一致!好吧,折騰了半天,原來是有「幕後**」。

順帶學習一下如何設定系統時間

標準c庫中只有獲取系統時間的api,好像還沒有設定系統時間的api,本文將談談如何在linux和windows平台設定系統時間,最後給出乙個與平台無關的設定系統時間的封閉函式。

1.linux下設定系統時間的函式有好幾個,先來看看最常用的stime()函式,這個函式只能精確到秒。

#define _svid_source /*如果你使用的是glib2的話,必須先定義這個巨集才能使用*/

#include

int stime(time_t *t);

引數說明:

t是以秒為單位的時間值,從gmt2023年1月1日0時0分0秒開始計算。

返回值:

成功返回0,錯誤返回-1,errno錯誤碼,efault表示傳遞的引數錯誤,如時間值是無效的值,eperm表示許可權不夠,注意只有root使用者才有修改系統時間的許可權。如果要讓普通程式修改系統時間,可以先切換到root使用者操作,修改完成後,再切換到普通使用者,或者用命令chmod +s給執行檔案加上root使用者的許可權。

2.linux是如何管理時間的?

在系統啟動時,linux作業系統將時間從cmos中讀到系統時間變數中,以後修改時間通過修改系統時間實現。為了保持系統時間與cmos時間的一致性,linux每隔11分鐘會將系統時間寫入cmos,同步時間。從這可以看出,獲取系統時間有兩個途徑,一種是從cmos中讀,一種是從系統中讀,但修改時間卻只有一種,即修改linux系統中的時間,而修改cmos中的時間是無效的,因為cmos中的時間會被定時重寫掉。另外還有一點要注意,修改了系統時間並不是馬上生效的,假如你修改了系統時間並馬上關機,再開機的時候,時間還是原來的,因為修改的時間還沒有來得及寫入cmos中。

3.通過settimeofday()函式來設定系統時間,這個函式設定的精度可以精確到微秒。

#include

int settimeofday(const struct timeval *tv , const struct timezone *tz);

struct timeval ;

struct timezone ;

tz引數為時區,時區結構中tz_dsttime在linux中不支援,應該置為0,通常將引數tz設定為null,表示使用當前系統的時區。該函式是glib中的,但在mingw中沒有實現。

該函式返回值與stime()一樣,同樣也需要root許可權。

4.設定cmos時間,其實它是通過rtc(real-time clock)裝置驅動來完成的,你可以用ioctl()函式來設定時間,當然也可以通過操作/dev/rtc裝置檔案,在此就不詳細說明了。

二、windows下設定系統時間

1.設定當前時區的時間

#include

bool setlocaltime(const systemtime* lpsystemtime);

typedef struct _systemtime systemtime;

函式成功返回非零,失敗返回零。注意要求呼叫程序必需有se_systemtime_name許可權。

2.另外還有乙個函式setsystemtime(),它的引數與setlocaltime一樣,只不過以utc時區為基準的。

bool setsystemtime(const systemtime* lpsystemtime);

二、乙個封裝的設定系統時間的函式

//設定成功返回true,否則返回false

bool set_local_time(struct tm& t)

北京時間換算國際時間

題目內容 utc是世界協調時,bjt是北京時間,utc時間相當於bjt減去8。現在,你的程式要讀入乙個整數,表示bjt的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分 如果小時是0,則沒有百位部分 如果小時不是0而分小於10分,需要保留十位上的0 如果小時是0而...

UTC時間與北京時間

經常混淆於此,特地研究了一下,記錄在此以備忘。整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通訊場合,為了統一起見,使用乙個統一的時間,稱為通用協調時 utc,universal time coordinated utc與格林尼治平均時 gmt,greenwich mean tim...

UTC與北京時間

整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通訊場合,為了統一起見,使用乙個統一的時間,稱為通用協調時 utc,universal time coordinated utc與格林尼治平均時 gmt,greenwich mean time 一樣,都與英國倫敦的本地時相同。在本文中,...