linux時間差計算
A. linux使用c/c++怎麼計算時間差
可以用time()系統調用來獲取系統時間,然後減去之前記錄的時間就得到了時間差
B. linux如何比對兩個時間差
#include <stdio.h>
#include <time.h>
int
main ()
{
struct tm tm, tm2;
char buf[255];
time_t t1, t2;
strptime ("Thu Feb 5 13:12:18 EST 2009", "%a %b %d %H:%M:%S EST %Y", &tm);
strptime ("Fri Feb 6 13:11:18 EST 2009", "%a %b %d %H:%M:%S EST %Y", &tm2);
t1 = mktime(&tm);
t2 = mktime(&tm2);
printf("TIME: %ld, %ld, %ld\n", t2, t1, t2-t1);
return 0;
}
C. linux上date格式化輸出及日期運算
1、按照YYYY-YY-DD的格式顯示當前日期
2、按照MM/DD/YY的格式顯示當前日期
3、計算3天前的日期
4、計算3天後的日期
5、計算1個月前的日期
6、計算1年前的日期
7、獲取當前時間
8、獲取1小時前的時間
9、獲取10分鍾前的時間
10、顯示系統當前的時間戳,基準是格林尼治天文台1970年1月1日0點0分0秒
11、把某時間戳轉換回日期格式
date -d "@1614679748"
2020年 03月 02日 星期六 18:09:08 CST
12、計算任意日期的後N日
13、計算兩個日期相差天數
D. linux中的時間是哪個時區的
1、more /etc/sysconfig/clock
ZONE="Asia/Shanghai"
2、GMT + 8 = UTC + 8 = CST ,我們的linux系統時間和計算機硬體時間應該是cst時間,上海時區。
3、安裝CentOS/RHEL時候,應當取消」系統時鍾使用UTC時間」這個選項,如果忘了取消,系統時鍾會差8小時
#vi /etc/sysconfig/clock
把UTC=true 修改為 UTC=false,保存後重啟即可。
4、#ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5、系統時鍾
date -R
6、zmp – This utility prints the current time and date in the specified time zone. Example:
# zmp Japan
Japan Tue Feb 28 17:52:18 2017 JST
# zmp Iceland
Iceland Tue Feb 28 08:52:45 2017 GMT
zmp China
China Tue Feb 28 08:53:02 2017 China
7、CST/GMT/UTC/DST縮寫
CST China Standard Time UT+8:00
GMT 格林威治標准時間(Greenwich Mean Time,簡稱G.M.T.)
UTC 世界協調時間UTC比GMT來得更加精準
DST 夏日節約時間:所謂「夏日節約時間」Daylight Saving Time(簡稱D.S.T.),
RTC 硬體時鍾(Real Time Clock,簡稱RTC),相對應的系統時鍾(System Clock)。
E. Linux下用shell獲取指定文件的最後修改時間並與系統時間比對,如果相差時間超過3分鍾則執行另一個腳本
使用date命令加上合適的時間格式化字元串(+%s),會顯示當前時間(或-d參數指定的時間)與1970-01-01 00:00:00相差的秒數(詳細可以參考date的man手冊)
所以基本想法就是使用date命令分別獲取當前時間與文件修改時間的秒數,然後看這2個秒數之間是否有相差180秒以上。
獲取當前時間比較簡單,直接date +%s就ok了
下面看看如何獲取文件時間
使用stat 命令後面跟一個文件名可以獲取文件的狀態,包括文件修改時間。其中文件修改時間會單獨一行顯示,格式如下:Modify: 2013-02-21 17:58:05.404876407 +0800 (具體的精度可能系統不同略微有些差別,但大致格式是這樣)
所以我們可以stat myfilename | grep Modify來獲取文件的修改時間的信息,然後通過awk分別獲取時間的日期和時間段
stat myfilename | grep Modify | awk '{print $2}' #這句獲取了日期段,即上面例子裡面的2013-02-21
stat myfilename | grep Modify | awk '{split($3,var,".");print var[1]}' #這句獲取了時間段,即上面例子裡面的17:58:05,具體關於awk的使用可以參考awk的使用手冊
那麼現在可以獲取文件修改時間與1970-01-01 00:00:00相差的描述了,就是date -d "$file_date $file_time" +%s
那麼這個時間與當前時間想減的結果與180相比就可以知道是否滿足條件了,滿足條件的話就可以執行相應的命令。
參考代碼如下:
current_datetime=`date +%s`
filedate=`stat tt.txt | grep Modify | awk '{print $2}'`
filetime=`stat tt.txt | grep Modify | awk '{split($3,var,".");print var[1]}'`
file_datetime=`date -d "$filedate $filetime" +%s
timedelta=`expr $current_datetime - $file_datetime`
if [ "$timedelta" -gt "180" ];then
echo "match condition"
fi