Shell獲取指定日期對應的週幾

2021-10-04 17:33:32 字數 1689 閱讀 3701

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...