shell操作日期時,經常會遇到獲取某一日期所對應的本週的週幾,以獲取對應的本週週六為例,那如果獲取本週週六的日期,是比較簡單的,有直接的函式搞定,具體shell指令碼如下:
current_sat_date_with_minus=
`date -d "saturday"
"+%y%m%d"
`
但是有的時候為了實現動態化程式的處理,可能這個日期不一定是當前日期,是個變化的引數日期,那要獲取這個動態引數日期對應的本週週幾怎麼辦呢?我找了下現成的函式,都沒搞定,於是就走點彎路吧,突然想起以前寫日曆的演算法,自己寫了乙個小演算法,以獲取本週六為例,這裡先普及乙個概念:時間戳:時間戳是指格林威治時間2023年01月01日00時00分00秒(北京時間2023年01月01日08時00分00秒)起至現在的總毫秒數。
具體**如下get_sat.sh:
#! /bin/bash
event_day=
$1#定義隨意的一天的引數
monday=
'19000205'
#指定是周一的日期,小一點比較好,因為正常使用的日期都比這個大,確保後面面stampdiff=`expr $enddate - $startdate`為正數
startdate=
`date -d $ +%s`
#計算周一的時間戳
echo
"startdate:$startdate"
enddate=
`date -d $ +%s`
#計算任意一天的時間戳
echo
"enddate:$enddate"
stampdiff=
`expr $enddate - $startdate`
#得到任意一天和周一時間戳的相差值
weekdiff=
`expr $[stampdiff/604800]
` #604800=60*60*24*7 即一周的時間戳總和,兩者差值時間戳除以604800取整數得到隨意時間和周一19000205相差的週數
echo
"weekdiff:$weekdiff"
n_end=
$(($weekdiff*7))
#得到隨意時間和周一19000205相差的天數,那麼周一19000205加上相差的天數剛好得到隨意時間對應的本週周一
n_end=$[
`expr $n_end + 5`
]#因為是週六,那麼再加5天,要獲取其他時間依情況更換加的天數
echo
"n_end : $n_end"
this_sat_day=
$(date -d "$monday +$ days" +%y%m%d)
#那麼原來的周一19000205加上相差的總天數得到隨意時間對應的本週六
echo
"this_sat_day:$this_sat_day"
#輸出結果
呼叫和執行如下:
[hadoop@shucang-10 sakura]$ ./get_sat.sh 20200402
startdate:-2205993943
enddate:1585756800
weekdiff:6269
n_end : 43888
this_sat_day:20200404
SQL Server 獲取指定日期
查詢一段時期內 在開發應收賬款管理系統時,需要編寫 到賬率考核 模組,一般財務上都是取月底的資料作為考核資料,所以涉及到用sql獲取年末 月末等日期,就在網上收集了一些內容,做乙個記錄 函式引數 功能 getdate 返回系統目前的日期與時間 datediff interval,date1,date...
shell指令碼刪除指定日期和指定日期前的檔案
測試環境redis持久化到硬碟報錯,發現是因為硬碟空間不夠導致。去尋找占用空間較大的任務,發現flink日誌檔案佔了70 容量,在此之前在測試環境沒有對flink日誌進行維護和刪除。為了以後自動維護日誌檔案,需要寫乙個能夠定時執行任務的shell指令碼。思路 每日凌晨執行指令碼,刪除一周之前的那一天...
mysql 獲取指定日期到指定日期 區間段的日期
第一種方法 cross join 就相當於mysql中的迴圈 cross join 把兩張表中的資料進行 n m的組合,即笛卡爾積 這裡的兩張表利用 union all都有5條資料,所以進行 cross join 後 就有25條資料 而指定的日期區間就會從這25條資料總產生 select curda...