用Linux shell 计算两个时间差

用Linux shell 计算两个时间差,第1张

start=`date +%s -d "2011-11-28 15:55:37"`

end=`date +%s -d "2011-11-28 15:55:52"`

echo $(($end-$start))

这个前提是你能拿到开始和结束时间字串的基础上的。

如果你的日志文件输出格式是上述的话,还有个方法:

cat 日志文件 | awk '/^000/{

start=$2 " " $3

end=$4 " " $5

stm=mktime(gensub(/[:-]/, " ", "g", start))

etm=mktime(gensub(/[:-]/, " ", "g", end))

print $1 " - " etm-stm

}'

感觉是驱动问题,导致系统对主板时钟晶振的频率对应的时间产生了差错?

Linux 开机后的时间是系统自己维护的,不以主板时间为准。这样系统自己维护的时间如果晶振频率的部分有问题,那肯定时间会不准。

不行你就设置每 30 分钟从主板对时一下吧。

造成这种问题的原因是:你的 *** 作系统时区跟你JVM的时区不一致。

你的 *** 作系统应该是中国的时区,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置: -Dfile.encoding=UTF8 -Duser.timezone=GMT+08

在一个精简的Linux安装上jre,所有的java程序获取的时间都不是系统时间。java程序获取的时间都是GMT时间,而系统是北京时间,是GMT+8,刚好相差8小时。只有两种方法可以解决 :

1、在程序中使用java的函数设定时区。

2、在启动java程序时加参数-Duser.timezone=GMT+8

jre是从/etc/sysconfig/clock这个文件中 获取时区信息的。

附clock文件内容:

ZONE="Asia/Shanghai"

UTC=false

ARC=false

ZONE -- 时区

UTC -- 表明时钟设置为UTC。

ARC -- 仅用于alpha表明使用ARC。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8941369.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-23
下一篇2023-04-23

发表评论

登录后才能评论

评论列表(0条)

    保存