代码执行的意思是什么?代码执行详情介绍 环球快报
如上例所示,
代码段
(资料图)
setenv( "TZ", "CST-08", 1 );//设置东八区 北京时间 tzset();// 这条代码执行的意思是什么?待解决。
转载:TZ环境变量,时区,夏令时_pirate_sir的博客-CSDN博客_tz环境变量
#include#include#include#include/** * * TZ环境变量,时区,夏令时 * 当前demon测试环境: 1.32为系统; 2.系统时区是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到现在的UTC时间的秒数;printf("time_t = %ld, ctime: = %s", now, ctime(&now) ); //char* ctime(const time_t *timer)返回一个表示当地时间的字符串(包含一个换行符),当地时间是基于参数 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); //转换成UTC世界时间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", "CST-8", 1);//设置时区(中国东八区) 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);//设置时区(新西兰标准时间) 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,表示新西兰标准时间; * * -12:00:00表示比UTC早12小时; * * NZDT,表示新西兰夏时制时间; * * -13:00:00,表示夏时制时间比UTC早13小时(即比标准时间快1小时); * * M10.1.0,M3.3.0表示夏令时从10月第一个星期日02:00:00开始到3月第三个星期日02:00:00结束。 * ==>m:指一年中的第几月(1 <= m <=>w:指一个月中的第几周(1 <= w <=>d:指一周中的第几天(0 <= d <=>time:该字段表示本地时间对夏时制生效或结束的时间,如果省略默认为02:00:00。 * */setenv("TZ", "NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0", 1);//设置时区(新西兰夏令时时间) 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 #设置为东八区时间 #c程序中setenv("TZ", "CST-8", 1);
转载:linux的时区设置函数tzset()_eric_zl_zhang的博客-CSDN博客_linux设置时区函数
本文转载于: http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html
tzset#includevoid tzset(void);
设置时间环境变量。 说明 tzset()函数使用环境变量TZ的当前设置把值赋给三个全局变量:daylight,timezone和tzname。 这些变量由ftime和localtime函数使用校正格林威治(UTC)时间为本地时间,通过time函数从系统时间计算UTC,使用如下语法设置TZ环境变量:
set TZ=tzn[+|-]hh[:mm[:ss]][dzn]
tzn:三字母时区名,例如PST,你必须指出本地时间距UTC的偏移量。 hh:UTC与本地时间的时差,任选带符号的。 mm:分钟,由冒号(:)与hh分隔开。 ss:秒钟,用冒号(:)与mm分隔开。 dzn:三字母夏令时时区例如PDT。如果夏令时没作用,设置TZ时不设置dzn的值。C运行库假设在计算夏令时(DST)时执行美国的规则。
其实tzn和dzn可为任意3个字母,只要中间的时差设置正确,localtime()和gmtime()函数调用都会处理正确。要注意一点,比如要将时区TZ设置为中国所在的东八区(即UTC+8:00),不使用夏令时,使用如下语句:
setenv("TZ", "GMT-8", 1);
注意是GMT-8而不是GMT+8,要不就设为了西八区,要比UTC还慢8个小时,这一点比较令人费解。
例如,为了设置TZ环境为德国对应的当前时区,你可以使用如下语句之一: set TZ=GST-1GDT set TZ=GST+1GDT 这些字符串使用GST指出德国标准时间,假设德国是超前UTC一个小时,并假设夏令时起作用。 如果TZ值没设置,tzset试图使用操作系统指定的时区信息,在Windwos NT和Windows95之下,这个信息指定在控制面版的日期/时间应用中,如果tzset不能获取这些信息,它缺省使用PST8PDT,它指定为太平洋标准时间。
基于TZ环境变量的值,当调用tzset时把如下值赋给全局变量daylight、timezone和tzname: 全局变量 说明 缺省值 daylight 如果在TZ设置中指定夏令时时区 1则为非0值;否则为0 timezone UTC和本地时间之间的时差,单位为秒 28800(28800秒等于8小时) tzname[0] TZ环境变量的时区名称的字符串值 如果TZ未设置则为空 PST tzname[1] 夏令时时区的字符串值; 如果TZ环境变量中忽略夏令时时区则为空PDT在上表中daylight和tzname数组的缺省值对应于"PST8PDT"。
如果从TZ环境变量忽略DST时区,daylight的值为0,ftime,gmtime和localtime函数对于它们的DST标志返回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
首先要说明的是我的系统是fedora,其他系统可能不完全相同。
1,时间保存在硬件实时钟(RTC)中,RTC由主板电池供电,即使关断电源也不会造成时间丢失。
2,系统启动时从RTC获取时间,这个步骤在rc.sysinit中做:
a,首先从/etc/sysconfig/clock中获取RTC相关参数UTC/ARC/SRM。UTC为true表示RTC保存的时间是UTC时间,false表示保存的是本地时间。ARC与SRM的含义参考hwclock的manpage,一般false即可;
b,根据上面获取的内容构造hwclock命令的参数,将时间由RTC读取到系统时钟。
*需要说明的一点是hwclock的输出是本地时间,localtime/utc参数只是用来告诉hwclock命令COMS时区是哪个时区。比如Linux系统的系统时区设置为CST(中国标准时间),COMS时间采用墙上时间,即COMS时区也是CST,这时如果使用--utc参数,会让hwclock误以为COMS时区为UTC,所以输出的时间会自动+8。
3,tzset():tzset在程序中用来初始化tzname等全局变量,它首先试图从环境变量“TZ”中获取时区,如果TZ环境变量存在,即getenv("TZ")返回值不为NULL,且包含内容有效,则使用TZ值;如果该变量存在但内容无效,比如包含错误的时区名字,则使用UTC;如果该变量不存在,即getenv("TZ")返回NULL,则查找系统时区设置文件,一般是/etc/localtime。localtime所指文件的内容格式可参考tzfile(5)。
4,time():返回自00:00:00 UTC, January 1, 1970到现在所经过的秒数,注意,是UTC。
5,ctime()/localtime()/mktime():这类和时区相关的函数内部会调用tzset,但只是第一次调用tzset会做实际初始化,后面的调用都是直接返回。
6,系统关闭时,如执行shutdown/reboot/poweroff/halt等操作后,系统时间会保存到RTC中,这是在halt脚本中完成的,参看/etc/init.d/halt内容。
标签:
相关推荐:
最新新闻:
- 代码执行的意思是什么?代码执行详情介绍 环球快报
- 几何学中多项式是什么?多项式是由变量以及标量的代数式吗?-焦点热文
- 园方回应游客给大熊猫投喂带包装火腿肠:很气愤!
- 这款Steam新作 展现了俄罗斯人眼中的黑暗格林童话
- 《街头霸王6》新解说员宣传片公开:日本少女冠军人美声甜!-天天快报
- 《怪物猎人崛起:曙光》主机发售日公开_天天精选
- 环球热头条丨《最后的生还者》PC重制版预告 配置需求公布
- 多人团队射击《恐龙浩劫》将于7月14日正式发售|世界新消息
- 《机械战警:暴戾都市》公布玩法预告延期至9月上市|每日热文
- 床头必备 奥克斯22升小冰箱258元
- 超高颜值 华硕小主机2999元|全球快看点
- 战纹2公布 登录Switch和PC_当前快讯
- 3D打印火箭即将试射
- 百亿补贴便宜100 机械师24寸显示器399元
- 快看点丨复仇爽剧《黑暗荣耀2》明天全集播出:第1季豆瓣8.9
- 【世界独家】internal_server error怎么办
- 《零:月蚀的假面》发售预告片公布 已登陆各平台_热头条
- Epic 2022年度总结:PC用户超2.3亿!送出99款游戏_聚焦
- 固定视角生存恐怖游戏《生者回声》试玩推出 世界时快讯
- 防止App恶意截图 安卓14预览版新功能
- 全球今日报丨万众期待 星空跳票到9月6日
- Homepod对手来了 SONOS新品支持空间音频
- 世界快资讯:电动提取灵魂 音波头部按摩仪149元
- 全球快资讯:索尼担忧微软收购之后COD在PS5上会更差
- 没有五险一金的公司能去吗上班_没有五险一金的公司能去吗
- 热点评!扁平疣的最佳治疗方法是什么(扁平疣的最佳治疗方法)
- 环球速读:《战争雷霆》衍生VR空战游戏《雷霆王牌》公布
- 时讯:传闻:《怪猎崛起:曙光》将于4月28日登陆PS/Xbox
- 【环球新要闻】每天少睡一两个小时算熬夜?专家提醒:大脑会变笨
- 当前头条:U20男足亚洲杯:中国队晋级八强!
- 《闪电十一人》最新作剧情来到初代25年后-世界新资讯
- 天天速递!韩国主帅希望复制02世界杯奇迹:之前能 现在也可以
- 市场监管总局公布第六批查处涉疫药品和医疗用品违法典型案例
- 世界百事通!140W 4060满血释放!ROG新款游戏本首发价9999元
- 腾讯NFT交易软件幻核APP凉了:将于6.30关闭下线
- 《雷顿教授与蒸汽新世界》新预告 支持简中
- 世界视讯!LadyGaga不会在95届奥斯卡表演 忙于拍摄《小丑2》
- 《使命召唤17:黑色行动5》Steam特别好评:T组制作必属精品
- 拒绝网红打卡拍照!宜家仓库后山姆也禁拍网红照:简讯
- 全球视点!赋能青少年健康成长 泰州首个民间社会组织“关工委”成立
- 世界百事通!大话新手序列号领取_大话外传新篇精英回归序列号礼包领取
- 我国新发现一颗近地小行星:直径约200m 俩足球场大
- PS港服会员优惠来了:升级二档三档可享65折优惠_世界热点评
- 《零:月蚀的假面》Steam特别好评 峰值863人
- 美洽代表成都高新区企业,出海赴欧开拓新市场
- 毕设在即,电脑硬盘崩了,有哪款比较值得购买的SSD?:世界信息
- 389元1TB固态10年质保3400MB/s
- iPhone 14 Plus黄色刚发布就破发:立减800 当前观点
- 小米Buds 4 Pro无线耳机即将在国际市场推出、支持蓝牙5.3:观速讯
- 环球观速讯丨黑暗童话《惊悚故事3:英格莉忏悔录》今日登陆Steam
- 数据显示:67%的《卧龙》Xbox玩家没能击败张梁
- 全球动态:游戏囧图:单马尾蒂法好凶 双生舞伶本尊COS来了
- 欺骗感情!90后男子承诺捐1100万没兑现成老赖:985母校怒起诉|焦点
- 环球观速讯丨黑暗童话《惊悚故事3:英格莉忏悔录》今日登陆Steam
- 矿卡崩了也没事!英伟达自信表态:我们游戏显卡也很行-天天热推荐
- 停止续约!米兰体育报:“现在不应该分心,应当全力...
- 焦点热门:PS中国发布《卧龙:苍天陨落》PS5性能宣传片 沉浸体验乱世三国
- 《生化危机4:重制版》广告疑似泄露:试玩Demo明天上线!_每日精选
- 当前信息:《蓓优妮塔起源:瑟蕾莎与迷失的恶魔》公布剧情预告片
- 重获新“声” 清华研发可穿戴人工喉咙还原准确率超90%
- 点亮尘封文明 解谜游戏《落叶城》NS版3月16日推出:快看
- 兼容 13 代酷睿,昂达推出两款主板,售价仅 449 元起
- 独居女生的浪漫之选三星BESOPKEHOME让女性拥抱自我-每日头条
- 聚焦女性健康,腾讯公益“关爱女性健康小红花日”项目启动
- 天天要闻:直降 1000 元,ROG 6 游戏手机优惠抢购,16GB+512GB 豪华配置
- iPhone 攻下日本手机一半市场,第二名夏普,小米等国产机只在 others
- 每日观点:梁朝伟称想重新尝试拍电视剧:美剧、韩剧都可接受
- 外媒:《星空》延期至9月恰好避开了大作云集的夏季
- 《原子之心》双生舞伶扮演者COS自己 自称闲暇时也会玩游戏-今头条
- 环球资讯:时隔4个月富坚义博重新公布进展 《全职猎人》新话缓慢更新
- 《星空》宣布再次延期至9月6日发售
- 《伊苏10》新情报和截图公布 可同时操控男女主战斗
- 世界快消息!云顶之弈S8.5危机选秀装备有哪些?危机选秀各阶段奖励一览
- 世界快看:速递 | 1.12亿美元助力多种中枢神经系统疾病疗法开发,新锐完成B轮融资
- 今日盘中股价莫名闪崩又恢复,舍得酒业发生了什么?
- 【新视野】RTX4060+Mini LED星云原画屏 ROG 幻16翻转版首发预约13499元超值
- 可以装包便于携带!华硕R7-5700U白迷你主机低至2999元-每日快讯
- 直降744元! 零刻 EQ59 PRO迷你主机655元入手!
- 科技成果赋智中小企业深度行 边界无限靖云甲ADR入选十大优秀案例
- 性价比逆天!三星32英寸4K智慧显示器低至1589元
- 如何解决iPhone连接电脑无反应?iPhone连不上电脑原因及解决方法
- 网速测试工具怎么测试网络速度?网速测试工具使用方法
- cad鼠标中键不能平移是怎么回事?cad鼠标中键不能平移快速处理方法
- 如何将U盘免疫病毒?u盘免疫工具设置方法步骤
- svchost.exe应用程序错误怎么办?svchost.exe应用程序错误解决方法步骤