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...