【发布时间】:2016-04-15 17:45:09
【问题描述】:
我需要在没有安装任何 GNU 的情况下将 Solaris 上的一些时间戳转换为纪元格式。
我用下面的代码试了一下。但是,有时返回值与正确值有 1-2 天的偏差
echo "Mar 20 20:09" | nawk -v FS="[: ]+" 'BEGIN {
month_array["Jan"]="01";
month_array["Feb"]="02";
month_array["Mar"]="03";
month_array["Apr"]="04";
month_array["May"]="05";
month_array["Jun"]="06";
month_array["Jul"]="07";
month_array["Aug"]="08";
month_array["Sep"]="09";
month_array["Oct"]="10";
month_array["Nov"]="11";
month_array["Dec"]="12";
}
{
year=2016;
month=month_array[$1];
day=$2; hour=$3; minute=$4;
if (month > 2) {
month=month+1;
} else {
month=month+13; year=year-1;
}
day=(year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day;
days_since_epoch=day-719591;
seconds_since_epoch=(days_since_epoch*86400)+(hour*3600)+(minute*60);
printf "%d\n", seconds_since_epoch;
}'
1458677340
bash-3.2$ ctime 1458677340
Tue Mar 22 20:09:00 2016
非常感谢
【问题讨论】:
-
这个神奇的数字是什么?
719591 -
它代表“1970 年 1 月 1 日”。如果我错了,请纠正我
-
该日期的格林威治标准时间午夜是纪元时间
0 -
@glennjackman 这是“0000 年 1 月 1 日”和 1970 年 1 月 1 日之间的天数。
-
如果你愿意,你可以把这段代码翻译成awk:$time_utils:from_ctime
标签: awk timestamp solaris epoch nawk