Shell

BusyBox 日期:在沒有 ntpdate 的情況下從 Internet 檢索日期

  • March 11, 2021

嵌入式 poky linux,不可ntpdate用。

看起來以下命令都不適合:

# date -s "$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-)" 
date: invalid date '08 Mar 2021 13:22:34 GMT'
# date -s "$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-6)"
date: invalid date '08 Mar 2021 13:22:34'
#date +"%d %b %Y %H:%M:%S" -s "$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-6)"
date: invalid date '08 Mar 2021 13:22:34'

更新

BusyBox 日期僅接受以下日期格式:

@seconds_since_1970
hh:mm[:ss]
[YYYY.]MM.DD-hh:mm[:ss]
YYYY-MM-DD hh:mm[:ss]
[[[[[YY]YY]MM]DD]hh]mm[.ss]

如果該選項在您使用的 BusyBox 版本中可用,則可以按照steeldriver-D的建議使用此命令:

busybox date -d '08 Mar 2021 13:22:34' -D '%d %b %Y %H:%M:%S'

最後我從Google解析了時間字元串,把它放在一個busybox date友好的格式(YYYY-mm-dd HH:MM:SS)中。希望將來有人會發現這很有用。

#!/bin/sh

monthnumber() {
   month=$1
   months="JanFebMarAprMayJunJulAugSepOctNovDec"
   tmp=${months%%$month*}
   month=${#tmp}
   monthnumber=$((month/3+1))
   printf "%02d\n" $monthnumber
}

G_DATE="$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-6)"
G_SPLIT=($(echo $G_DATE | tr " "))

BB_DATE="${G_SPLIT[2]}-$(monthnumber ${G_SPLIT[1]})-${G_SPLIT[0]} ${G_SPLIT[3]}"

date -s "$BB_DATE"

monthnumber()函式取自https://stackoverflow.com/a/41385862/9815377

也許你可以更新busybox。我得到了 V1.30 並且命令有效

引用自:https://unix.stackexchange.com/questions/638181