一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

環(huán)球觀速訊丨代碼執(zhí)行的意思是什么?代碼執(zhí)行詳情介紹

來(lái)源:CSDN 時(shí)間:2023-03-10 15:13:13

如上例所示,

代碼段


(資料圖片)

setenv( "TZ", "CST-08", 1 );//設(shè)置東八區(qū) 北京時(shí)間    tzset();//  這條代碼執(zhí)行的意思是什么?待解決。

轉(zhuǎn)載:TZ環(huán)境變量,時(shí)區(qū),夏令時(shí)_pirate_sir的博客-CSDN博客_tz環(huán)境變量

#include#include#include#include/** *  * TZ環(huán)境變量,時(shí)區(qū),夏令時(shí) * 當(dāng)前demon測(cè)試環(huán)境: 1.32為系統(tǒng); 2.系統(tǒng)時(shí)區(qū)是UTC。 *  */ int main(){time_t now = 0; char * TZ = NULL;  struct tm *tm_ = NULL; struct timeval tval = {0,0}; struct timezone tzone = {0,0};TZ = getenv("TZ");printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ );now = time(NULL); //1970到現(xiàn)在的UTC時(shí)間的秒數(shù);printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); //char* ctime(const time_t *timer)返回一個(gè)表示當(dāng)?shù)貢r(shí)間的字符串(包含一個(gè)換行符),當(dāng)?shù)貢r(shí)間是基于參數(shù) timer。gettimeofday(&tval, &tzone);printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime); tm_ = gmtime(&now);                  //轉(zhuǎn)換成UTC世界時(shí)間printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);    tm_ = localtime(&now);               //轉(zhuǎn)換成本地時(shí)間printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); printf("\n");   setenv("TZ", "CST-8", 1);//設(shè)置時(shí)區(qū)(中國(guó)東八區(qū)) TZ = getenv("TZ");printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ ); now = time(NULL);printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); gettimeofday(&tval, & tzone);printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);tm_ = gmtime(&now);            printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);    tm_ = localtime(&now);        printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); printf("\n");  setenv("TZ", "NZST-12:00:00", 1);//設(shè)置時(shí)區(qū)(新西蘭標(biāo)準(zhǔn)時(shí)間) TZ = getenv("TZ");printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ ); now = time(NULL);printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); gettimeofday(&tval, & tzone);printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);tm_ = gmtime(&now);            printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);    tm_ = localtime(&now);          printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); printf("\n");  /** *  * NZDT-13:00:00,M10.1.0,M3.3.0 *  * NZST,表示新西蘭標(biāo)準(zhǔn)時(shí)間; *  * -12:00:00表示比UTC早12小時(shí); *  * NZDT,表示新西蘭夏時(shí)制時(shí)間; *  * -13:00:00,表示夏時(shí)制時(shí)間比UTC早13小時(shí)(即比標(biāo)準(zhǔn)時(shí)間快1小時(shí)); *  * M10.1.0,M3.3.0表示夏令時(shí)從10月第一個(gè)星期日02:00:00開始到3月第三個(gè)星期日02:00:00結(jié)束。 * ==>m:指一年中的第幾月(1 < = m <=>w:指一個(gè)月中的第幾周(1 <= w <=>d:指一周中的第幾天(0 <= d < =>time:該字段表示本地時(shí)間對(duì)夏時(shí)制生效或結(jié)束的時(shí)間,如果省略默認(rèn)為02:00:00。 * */setenv("TZ", "NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0", 1);//設(shè)置時(shí)區(qū)(新西蘭夏令時(shí)時(shí)間) TZ = getenv("TZ");printf("====================================> TZ = %s\n", TZ == NULL?"env TZ not seted" : TZ ); //while(1){now = time(NULL);printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); gettimeofday(&tval, & tzone);printf("gettimeofday tval.tv_sec = %d, tval.tv_usec = %d; tzone.tz_minuteswest = %d, tzone.tz_dsttime = %d.\n", \tval.tv_sec, tval.tv_usec, tzone.tz_minuteswest, tzone.tz_dsttime);tm_ = gmtime(&now);            printf("gmtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);    tm_ = localtime(&now);         printf("localtime: dstflag = %d, %d-%d-%d %d:%d:%d\n",tm_->tm_isdst, tm_->tm_year + 1900, tm_->tm_mon+1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec); printf("\n");sleep(5);} return 0;}

#bash中export TZ CST-8 #設(shè)置為東八區(qū)時(shí)間 #c程序中setenv("TZ", "CST-8", 1);

轉(zhuǎn)載:linux的時(shí)區(qū)設(shè)置函數(shù)tzset()_eric_zl_zhang的博客-CSDN博客_linux設(shè)置時(shí)區(qū)函數(shù)

本文轉(zhuǎn)載于:  http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html

tzset#includevoid tzset(void);

設(shè)置時(shí)間環(huán)境變量。 說(shuō)明 tzset()函數(shù)使用環(huán)境變量TZ的當(dāng)前設(shè)置把值賦給三個(gè)全局變量:daylight,timezone和tzname。 這些變量由ftime和localtime函數(shù)使用校正格林威治(UTC)時(shí)間為本地時(shí)間,通過(guò)time函數(shù)從系統(tǒng)時(shí)間計(jì)算UTC,使用如下語(yǔ)法設(shè)置TZ環(huán)境變量:

set TZ=tzn[+|-]hh[:mm[:ss]][dzn]

tzn:三字母時(shí)區(qū)名,例如PST,你必須指出本地時(shí)間距UTC的偏移量。 hh:UTC與本地時(shí)間的時(shí)差,任選帶符號(hào)的。 mm:分鐘,由冒號(hào)(:)與hh分隔開。 ss:秒鐘,用冒號(hào)(:)與mm分隔開。 dzn:三字母夏令時(shí)時(shí)區(qū)例如PDT。如果夏令時(shí)沒作用,設(shè)置TZ時(shí)不設(shè)置dzn的值。C運(yùn)行庫(kù)假設(shè)在計(jì)算夏令時(shí)(DST)時(shí)執(zhí)行美國(guó)的規(guī)則。

其實(shí)tzn和dzn可為任意3個(gè)字母,只要中間的時(shí)差設(shè)置正確,localtime()和gmtime()函數(shù)調(diào)用都會(huì)處理正確。要注意一點(diǎn),比如要將時(shí)區(qū)TZ設(shè)置為中國(guó)所在的東八區(qū)(即UTC+8:00),不使用夏令時(shí),使用如下語(yǔ)句:

setenv("TZ", "GMT-8", 1);

注意是GMT-8而不是GMT+8,要不就設(shè)為了西八區(qū),要比UTC還慢8個(gè)小時(shí),這一點(diǎn)比較令人費(fèi)解。

例如,為了設(shè)置TZ環(huán)境為德國(guó)對(duì)應(yīng)的當(dāng)前時(shí)區(qū),你可以使用如下語(yǔ)句之一: set TZ=GST-1GDT set TZ=GST+1GDT 這些字符串使用GST指出德國(guó)標(biāo)準(zhǔn)時(shí)間,假設(shè)德國(guó)是超前UTC一個(gè)小時(shí),并假設(shè)夏令時(shí)起作用。 如果TZ值沒設(shè)置,tzset試圖使用操作系統(tǒng)指定的時(shí)區(qū)信息,在Windwos NT和Windows95之下,這個(gè)信息指定在控制面版的日期/時(shí)間應(yīng)用中,如果tzset不能獲取這些信息,它缺省使用PST8PDT,它指定為太平洋標(biāo)準(zhǔn)時(shí)間。

基于TZ環(huán)境變量的值,當(dāng)調(diào)用tzset時(shí)把如下值賦給全局變量daylight、timezone和tzname: 全局變量    說(shuō)明                                                     缺省值 daylight      如果在TZ設(shè)置中指定夏令時(shí)時(shí)區(qū)          1則為非0值;否則為0 timezone    UTC和本地時(shí)間之間的時(shí)差,單位為秒   28800(28800秒等于8小時(shí)) tzname[0] TZ環(huán)境變量的時(shí)區(qū)名稱的字符串值        如果TZ未設(shè)置則為空 PST tzname[1]   夏令時(shí)時(shí)區(qū)的字符串值;                        如果TZ環(huán)境變量中忽略夏令時(shí)時(shí)區(qū)則為空PDT在上表中daylight和tzname數(shù)組的缺省值對(duì)應(yīng)于"PST8PDT"。

如果從TZ環(huán)境變量忽略DST時(shí)區(qū),daylight的值為0,ftime,gmtime和localtime函數(shù)對(duì)于它們的DST標(biāo)志返回0。 例子

/ * TZSET.C: This program first sets up the time zone by* placing the variable named TZ=EST5 in the environment* table. It then uses tzset to set the global variables*  named daylight, timezone, and tzname.*/ #include#include#includevoid main( void )  {if( putenv( "TZ=EST5EDT" ) == -1 ) {printf( "Unable to set TZ/n" );exit( 1 ); } else {     tzset(); printf( "daylight = %d\n", daylight );     printf( "timezone = %ld\n", timezone );     printf( "tzname[0] = %s\n", tzname[0] ); } exit( 0 ); }

輸出  daylight = 1  timezone = 18000  tzname[0] = EST

參見 asctime,ftime,gmtime,localtime,time,utime

首先要說(shuō)明的是我的系統(tǒng)是fedora,其他系統(tǒng)可能不完全相同。

1,時(shí)間保存在硬件實(shí)時(shí)鐘(RTC)中,RTC由主板電池供電,即使關(guān)斷電源也不會(huì)造成時(shí)間丟失。

2,系統(tǒng)啟動(dòng)時(shí)從RTC獲取時(shí)間,這個(gè)步驟在rc.sysinit中做:

a,首先從/etc/sysconfig/clock中獲取RTC相關(guān)參數(shù)UTC/ARC/SRM。UTC為true表示RTC保存的時(shí)間是UTC時(shí)間,false表示保存的是本地時(shí)間。ARC與SRM的含義參考hwclock的manpage,一般false即可;

b,根據(jù)上面獲取的內(nèi)容構(gòu)造hwclock命令的參數(shù),將時(shí)間由RTC讀取到系統(tǒng)時(shí)鐘。

*需要說(shuō)明的一點(diǎn)是hwclock的輸出是本地時(shí)間,localtime/utc參數(shù)只是用來(lái)告訴hwclock命令COMS時(shí)區(qū)是哪個(gè)時(shí)區(qū)。比如Linux系統(tǒng)的系統(tǒng)時(shí)區(qū)設(shè)置為CST(中國(guó)標(biāo)準(zhǔn)時(shí)間),COMS時(shí)間采用墻上時(shí)間,即COMS時(shí)區(qū)也是CST,這時(shí)如果使用--utc參數(shù),會(huì)讓hwclock誤以為COMS時(shí)區(qū)為UTC,所以輸出的時(shí)間會(huì)自動(dòng)+8。

3,tzset():tzset在程序中用來(lái)初始化tzname等全局變量,它首先試圖從環(huán)境變量“TZ”中獲取時(shí)區(qū),如果TZ環(huán)境變量存在,即getenv("TZ")返回值不為NULL,且包含內(nèi)容有效,則使用TZ值;如果該變量存在但內(nèi)容無(wú)效,比如包含錯(cuò)誤的時(shí)區(qū)名字,則使用UTC;如果該變量不存在,即getenv("TZ")返回NULL,則查找系統(tǒng)時(shí)區(qū)設(shè)置文件,一般是/etc/localtime。localtime所指文件的內(nèi)容格式可參考tzfile(5)。

4,time():返回自00:00:00 UTC, January 1, 1970到現(xiàn)在所經(jīng)過(guò)的秒數(shù),注意,是UTC。

5,ctime()/localtime()/mktime():這類和時(shí)區(qū)相關(guān)的函數(shù)內(nèi)部會(huì)調(diào)用tzset,但只是第一次調(diào)用tzset會(huì)做實(shí)際初始化,后面的調(diào)用都是直接返回。

6,系統(tǒng)關(guān)閉時(shí),如執(zhí)行shutdown/reboot/poweroff/halt等操作后,系統(tǒng)時(shí)間會(huì)保存到RTC中,這是在halt腳本中完成的,參看/etc/init.d/halt內(nèi)容。

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 甘泉县| 山东省| 罗田县| 龙门县| 麻栗坡县| 泰宁县| 突泉县| 合作市| 昌江| 申扎县| 泰州市| 南岸区| 湖北省| 临江市| 金昌市| 洛南县| 鹤庆县| 屯昌县| 县级市| 郓城县| 乐山市| 六安市| 五家渠市| 康马县| 阿城市| 萝北县| 西乌珠穆沁旗| 洪江市| 厦门市| 稻城县| 武夷山市| 左云县| 苍山县| 新乡市| 宾阳县| 岳阳市| 砀山县| 武邑县| 冕宁县| 武清区| 桐梓县|