获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间

前言

有时候需要判断系统是否有修改过时间,最简单的方法就是获取当前时间A,然后sleep X秒,然后获取 时间B,如果 时间B - 时间A ≠ X,那就表示系统时间被修改过。

上面方案是可行的,但时间A延时X在进程重启时不太好判断系统时间是否修改过时间。

已经有接口可以获取系统运行秒数,那么可以用当前时间减去运行秒数,得到系统启动时间,如果下一次计算出来的系统启动时间有变化则可以认为修改过系统时间。

测试代码

下面是我的测试代码,相关方法我已经写到我常用的库里面了。对外提供接口为获取系统运行时间(单位:秒),以及获取系统启动时间(为时间戳,如果没有修改时间则每次获取都一样)。

package main

import (
"fmt"
"time" "github.com/jan-bar/golibs/timer"
) func main() {
fmt.Printf("run:%d,uptime:%s\n", timer.GetUpTime(),
time.Unix(timer.GetSysUpTime(), 0).Format("2006-01-02 15:04:05"))
}

Win测试

需要对比win的启动时间可以使用systeminfo命令,下图就是运行结果,程序输出系统运行时间和启动时间点。

获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间

Linux测试

在Linux下系统运行时间是保存在cat /proc/uptime的第一个值,因此可以用命令date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"

得到Linux的启动时间,如下图所示。

获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间

总结

本文提供了获取Win和Linux获取系统运行时间的方法,都是调用相关方法,不是用啥命令行获取的,效率还是杠杠的。

用法不止用来判断是否修改过系统时间,还可以用来做某些系统展示使用,总之系统提供的方法我们在合适的时候使用就行咯。

上一篇:paip.sql2k,sql2005,sql2008,sql2008 r2,SQL2012以及EXPRESS版本的区别


下一篇:virtualenv与virtualenvwrapper的配置