linux 的时区设置函数tzset()
linux 的时区设置函数tzset()
![](http://static.blog.csdn.net/images/category_icon.jpg)
![](http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg)
本文转载于: http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html
tzset
#incude <time.h >
void 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 <time.h>
#include <stdlib.h>
#include <stdio.h>
void 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内容。
linux 的时区设置函数tzset()相关推荐
- linux的时区设置函数tzset()
本文转载于: http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html tzset #incude <time.h& ...
- linux系统时区设置
linux系统时区设置 - 系统时钟设置 格式:date 月/日时:分:年.秒 [root@localhost ~]# date 080319462010.55 二 8月 3 19:46:55 C ...
- linux桌面时区设置,如何在Ubuntu 20.04上设置或更改时区
对于许多与系统相关的任务和进程,使用正确的时区至关重要. 例如,cron守护程序使用系统的时区执行cron作业,而日志文件中的时间戳基于系统的同一时区. 在Ubuntu上,系统的时区是在安装过程中设置 ...
- Linux服务器时区设置
首先要知道有Linux服务器有2种时钟类型 1.硬件时钟(RTC time) 可以通过hwcolock或clock命令操作硬件时钟通过date修改时间,当系统下次重启时,系统时钟还会从硬件时钟去取 ...
- arm linux修改时区设置
arm linux 通过NTP对时之后,终端命令行Date命令显示的时间是对的,但是web服务器中的时间还是差8H.之前是通过export TZ=CST-8 修改的系统时区. 最后通过增加: ./et ...
- linux下时区设置和时间同步
一.时区设置: [root@master ~]# tzselect Please identify a location so that time zone rules can be set corr ...
- linux - 时间时区设置
关键词:时间 时区 docker时区设置 时间戳转换 北京时间 date 设置时区 TZ='Asia/Shanghai' TZ='Asia/Shanghai' date "+%F__%T__ ...
- linux操作系统时区设置,linux下面的时间和时区的设置
crunchbang在安装的时候是按照英文安装的,当时的时区也是用的美国,但是安装完以后虽然还是使用英文,但是时区总不能不改吧.所以对时区和时间更改的命令如下: 一.时区 1. 查看当前时区 date ...
- linux默认时区pdt,Linux的时区设置
在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下,这里基本涵盖了大部分的国家和城市# ls -F /usr/shar ...
最新文章
- php自动加载和实现方法,php 自动加载方法
- 不想被AI降维打击?美国“四院院士”写的DL科普书了解一下
- 对网络体系变革的思考
- 关于SQL Server 数据库归档的一些思考和改进
- .net core高并发_高并发下的Node.js与负载均衡
- 基于Java+SpringBoot+vue+element实现新冠疫情物资管理系统详细设计
- ubuntu安装vasp_用强大的GROMACS分析工具分析VASP的动力学结果
- RecyclerView,ListView,GridView等UI控件使用及其优化和图片错位--
- java 修改mysql密码_mysql数据库忘记密码时如何修改
- 实用工具,可以生成dal层的相关cs代码
- 大势至服务器共享文件监控软件8.6,大势至服务器共享文件夹监控软件、局域网共享管理软件、局域网共享设置软件...
- 萤火虫小程序_漫展广州丨第24届酷狗蘑菇萤火虫漫展圆满收官,我们国庆见!...
- Python拟合SHARP红外测距传感器相关数据
- Word文档批量导入
- php未来发展前景如何
- 如何将两张图片合成一张?
- 渗透安全学习记录笔记
- 女生应该读的30本书
- pancake-frontend(薄饼)二次开发
- SSL证书的几个误解,正确认识SSL证书
热门文章
- Device /dev/sdc excluded by a filter.
- MySQL常见数据类型(小胖虎带你了解MySQL基础知识,只为博君一关注)
- Chrome 浏览器有些网站无法保存密码,手动保存
- csapi matlab,Matlab函数csapi与papi的区别是什么
- console.log()用法
- 浅谈Linux PCI设备驱动(二)
- 收银怎样挂单和取单_收银机如何取消挂单
- 轻量化中文版linux,MX Linux:一款专注于简洁性的中等体量发行版 | Linux 中国
- 在混乱的数字货币世界里,如何掌握你的思维避免掉进陷阱?
- 清华文康活动特刊:多重活动分享贴,不来你就OUT啦