c語言local
① 用C語言獲取本地的時區
getlocaltime裡面是沒有時區信息的。
你可以這樣:
time_ttime_utc=0;
structtm*p_tm_time;
inttime_zone=0;
p_tm_time=localtime(&time_utc);//轉成當地時間
time_zone=(p_tm_time->tm_hour>12)?(p_tm_time->tm_hour-=24):p_tm_time->tm_hour;
把0時間轉為當地時間,得到的是帶時區的結果。
② C語言關於localtime_s()和asctime_s()兩個函數的用法
Visual C++ 6.0開發環境中顯示當地日期與時間主要通過localtime()函數來實現,該函數的原型在time.h頭文件中,其語法格式如下:
structtm*localtime(xonsttime_t*timer)
該函數的作用是把timer所指的時間(如函數time返回的時間)轉換為當地標准時間,並以tm結構形式返回。其中,參數timer為主要獲取當前時間的傳遞參數,格式為time_t指針類型。
而在Visual Studio 2010極其以後的版本,新增了安全函數,改成localtime_s(),語法格式也發生了變化:
errno_tlocaltime_s(
structtm*_tm,
consttime_t*time
);
其中:
_tm指向要填充的時間結構的指針。time指針,指向存儲的時間。
如果成功,返回值則為零。如果失敗,返回值將是錯誤代碼。錯誤代碼是在 Errno.h 中定義的。
結構類型的欄位 tm 存儲下面的值,其中每個為int。
tm_sec分鍾後的幾秒 (0-59)。tm_min小時後的分鍾 (0-59)。tm_hour午夜後經過的小時 (0-23)。tm_mday月 (1-31) 天。tm_mon月 (0 – 11;年 1 月 = 0)。tm_year年份 (當前年份減去 1900年)。tm_wday星期幾 (0 – 6;星期日 = 0)。tm_yday每年的一天 (0-365;1 月 1 日 = 0)。tm_isdst如果夏令時有效,則為,正值夏時制不起作用; 如果為 0如果夏時制的狀態是未知的負值。 如果 TZ 設置環境變數,C 運行庫會假定規則適用於美國境內用於實現夏令時 (DST) 計算。
下面以一個Visual Studio 2015實例來輸出當地日期與時間:
#include<iostream>
#include<ctime>
usingnamespacestd;
intmain(void)
{
structtmt;//tm結構指針
time_tnow;//聲明time_t類型變數
time(&now);//獲取系統日期和時間
localtime_s(&t,&now);//獲取當地日期和時間
//格式化輸出本地時間
printf("年:%d ",t.tm_year+1900);
printf("月:%d ",t.tm_mon+1);
printf("日:%d ",t.tm_mday);
printf("周:%d ",t.tm_wday);
printf("一年中的第%d天 ",t.tm_yday);
printf("時:%d ",t.tm_hour);
printf("分:%d ",t.tm_min);
printf("秒:%d ",t.tm_sec);
printf("夏令時:%d ",t.tm_isdst);
system("pause");
return0;
}