VC 設定系統時間

2021-05-24 00:54:47 字數 2986 閱讀 2044

vc 設定系統時間

2023年06月08日 星期一 18:18

1、使用api函式setlocaltime進行本地時間設定。

1)setlocaltime函式的原型:

bool setlocaltime( const systemtime *lpsystemtime );

輸入引數lpsystemtime是乙個systemtime型別的引數,如果設定成功,返回true,本地時間將會變成lpsystemtime所指定的時間,否則返回false。

看一下systemtime的格式:

typedef struct _systemtime systemtime, *psystemtime;

各成員的含義不用解釋了吧。

2)我們來看一下如何利用systemtime結構體和setlocaltime函式進行本地時間的設定。

systemtime st;

st.wyear = 2007;

st.wmonth = 11;

st.wday = 24;

st.whour = 3;

st.wminute = 14;

st.wsecond = 0;

st.wmilliseconds = 0;

setsystemtime(&st);

對比一下systemtime結構體,可以發現,除wdayofweek成員之外,其它各成員都進行賦值了,甚至連wmilliseconds。使用這種 方式進行系統時間設定時,會忽略wdayofweek成員,可以不進行該成員的賦值(即使你賦值了也不會被考慮的),但其它所有成員都必須時行賦值,否則 無法成功地進行時間設定。

3)如果只想對其中的幾項進行設定的話,可以先使用getlocaltime函式來獲取當前本地時間,然後再對相應的項進行修改,如下:

systemtime st;

getlocaltime(&st);

st.whour = 3;

setlocaltime(&st);

這樣的方式比上面方便多了。

4)上面說到的方法都是對每一項單獨進行設定,在vc裡面,也提供了一次性設定所有項的方法,使用coledatetime類。

coledatetime tm;

systemtime st;

tm.parsedatetime("2007-11-24 8:00:00");

tm.getassystemtime(st);

setlocaltime(&st);

程式應該很好懂吧,不過有幾個注意點要說明一下。

a)先是parsedatetime,函式原型:

bool parsedatetime(

lpctstr lpszdate,

dword dwflags = 0,

lcid lcid = lang_user_default );

lpszdate就是指定的日期時間了,可以有很多種形式,如:

"25 january 1996"

"8:30:00"

"20:30:00"

"january 25, 1996 8:30:00"

"8:30:00 jan. 25, 1996"

"1/25/1996 8:30:00"

b)dwflags有三種值,locale_nouseroverride、var_timevalueonly、var_datevalueonly。 locale_nouseroverride是使用系統預設的方式,var_timevalueonly是忽略日期,在該選項下,日期會被設定為0,也就 是2023年12月30日,在var_datevalueonly下忽略時間,時間被設定為0,即午夜零點。

c)至於第三個引數lcid,是指定轉換方式,語言支援方面的,msdn裡面有個很詳細的表,有興趣可以去看看。

d)coledatetime還提供了獲取時間的函式,如getyear()之類的。

e)注意一下,如果沒有指定日期的話,轉換後日期就自動變為0,也就是跑2023年去了,這可很危險啊。本來還想偷個懶不指定呢,誰知道怎麼偷懶的告訴我一聲啊。

2、setlocaltime與setsystemtime的差別

setsystemtime的用法與setlocaltime基本相同,不重複了。差點在於setsystemtime所帶的引數指定的是utc時間(國 際標準時間),也就是說,像我的電腦裡指定的是東八區,這樣的話,使用setsystemtime設定之後,系統的時間,會比引數裡所設定的時間快8個小 時。

另外,這兩個函式設定的時間,都是對本地機各個系統都有效的。本來很好奇windows系統下改了時間,linux下是不是也會跟著改呢。事實證明是這樣的。

3、使用coledatetimespan類進行時間的加減。

coledatetime tm;

coledatetimespan ts;

tm.parsedatetime("2007-11-24 8:00:00");

ts.setdatetimespan(0,8,0,-14);

tm+=ts;

systemtime st;

tm.getassystemtime(st);

setlocaltime(&st);

這個程式也很易懂,不說什麼了,你只要想清楚了是該加上這個時間差呢還是減去這個時間差就行了,我是經常轉不過來啦。

另外,似乎在xp下有許可權問題,不是管理員賬號的可能不能這樣進行修改,這個我沒有去試過,誰去試過了跟我說一下吧。

最後補充一句,修改系統時間之後,編譯時候容易出問題,最好是每次編譯的時候把時間改回來了再重新編譯,或者使用rebuild all,全部重新編譯,要不很有可能即使你編譯了,而得到的可執行檔案還是修改之前的。

C 設定系統時間

在程式中有時需要系統時間準確,為了方便修改時間,做了個時間修改的,如下 using system using system.collections.generic using system.componentmodel using system.data using system.drawing u...

Java設定系統時間

無法實現的方法 process p runtime.exec date outputstream os p.getoutputstream os.write 2006 02 15 n process p runtime.exec time outputstream os p.getoutputstr...

QT 設定系統時間

windows上實現 include include bool hstart sdate int year,int mon,int day linux上實現 qt 讀取和修改系統時間 qtime ct qtime currenttime 修改系統時間 change the system time q...