UNIX 的时间和时区
时间
所有 UNIX 系统都采用格林威治时间从1970-01-01午夜后开始计算的微秒数来保存时间,这一日期通常称为 epoch,正值表示为 1970 以后,负值则表示 1970 年以前。
时间刷新频率由 /usr/include/sys/param.h 中的 HZ 常量决定,该值决定了系统的时间精度,在 Solaris 中的定义:
#define HZ ((clock_t)_sysconf(_SC_CLK_TCK))由于所有 UNIX 系统都按照 epoch 来计算时间,对于 32bit 的 UNIX 系统时间范围为 1901.9042 ~ 2038.0958,这可能造成系统或者应用程序的问题,参考 eygle 的文章:
_SC_CLK_TCK 表示每秒的 clock ticks 数,也称为嘀嗒数
Oracle与Linux/Unix下的时间处理
Oracle诊断案例-Job任务停止执行
时区
TZ 环境变量保存当前时区,在安装系统过程会要求设置一个默认时区。/usr/lib/zoneinfo 目录和其子目录中保存了所有支持的时区信息(Solaris 时区信息保存在 /usr/share/lib/zoneinfo 中)。TZ 环境变量的值必须包含在这些时区文件中,如果设置错误将会被重置为格林威治标准时间。
在 Solaris 中可以通过修改 /etc/default/init 文件中的 TZ 值来修改默认的时区。为了兼容早期版本,可以为该文件建立一个字符连接:/etc/TIMEZONE。该文件的格式为每行一条 VAR=value,VAR 必须是 TZ, LANG, CMASK 和任何 LC_* 环境变量。
参考:http://bbs.chinaunix.net/viewthread.php?tid=877273
显示时间
所有 UNIX 系统中都有 date 程序,用来显示系统时钟。date 程序会根据 TZ 环境变量显示合适的时间。
oracle DBALNP01 > echo $TZ此外,可以指定 date 的显示格式,语法:
GB-Eire
oracle DBALNP01 > date
Wed Jun 13 07:54:38 BST 2007
oracle DBALNP01 > TZ=PRC
oracle DBALNP01 > echo $TZ
PRC
oracle DBALNP01 > date
Wed Jun 13 14:55:04 CST 2007
date + format其中 format 必须是一个词,所以对于包含空白的 format 参数需要用引号包起来
oracle DBALNP01 > date +%y%m%dformat 参数可以参考:
070613
http://www.heysky.net/digest/2007/04/date_format.html
Posted by Sky at 03:18 PM | Permalink | Edit | OS