歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell 貼士: Unix 時間到字面

Shell 貼士: Unix 時間到字面

日期:2017/2/28 16:09:48   编辑:SHELL編程

我的工作需要天天跟報表數據打交道,在交換的文件中,一般時間的字段內容都是 Unix 時間。為了檢查數據的正確性,不可避免地需要轉換 Unix 時間到人類可讀的字面時間。

下面想分享的是一個在 Shell 下轉換 Unix 時間到字面的小方法。這個小 shell 函數可以放在 ~/.bashrc 中方便快捷使用。

# 轉換 Unix 時間到本地時間字符串
function ctime()
{
    date -d "UTC 1970-01-01 $1 secs"
}

使用方法很簡單:

$ ctime 1234567890
Sat Feb 14 07:31:30 CST 2009

對 date 命令熟悉的同學會說,date 不是已經有直接轉 Unix 時間的參數了嗎?

$ date -d @1234567890
Sat Feb 14 07:31:30     2009

但是不好意思的是,小弟有時候用的 date 程序好老,不支持 @ 符號。

$ date --version
date (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

PS: 寫完這篇博文,我又想到了一個有趣的事情,既然很多 Linux 64 位版本的 time_t 已經是 long long 格式了,那麼 date 命令有沒有 year 2038 問題呢?

下面是 date (coreutils) 5.2.1 在 64 位服務器上的嘗試結果:

$ date +%s -d "Tue Jan 19 11:14:07 CST 2038"
2147483647
$ date +%s -d "Tue Jan 19 11:14:08 CST 2038"
2147483648
$ date +%s -d "Tue Jan 19 11:14:09 CST 2999"
32473710849
$ ctime 2147483647
Tue Jan 19 11:14:07 CST 2038
$ ctime 2147483648
Sat Dec 14 04:51:44 LMT 1901
$ ctime 32473710849
Mon Mar 28 07:33:53 LMT 1910

看來字面時間和 Unix 時間之間互轉存在著問題啊!但是用 Ubuntu 11.04 的 date (GNU coreutils) 8.5 嘗試就不存在這個問題了。

Copyright © Linux教程網 All Rights Reserved