由于 BusyBox 中的日期不如gnu date强大,因此我在计算上周六的日期时遇到问题。
last_sat=`date +"%Y-%m-%d" -d "last saturday"`
Run Code Online (Sandbox Code Playgroud)
只适用于 gnu date。
我发现了类似的东西可以从 Epoch 计算
busybox date -D '%s' -d "$(( `busybox date +%s`+3*60 ))"
Run Code Online (Sandbox Code Playgroud)
但我的 BusyBox (v1.1.0) 无法识别该-D
参数。
有什么建议么?
今天之前的最后一个星期六,在 busybox 1.16 下:
date -d "UTC 1970-01-01 $(date +"%s - 86400 - %w * 86400"|xargs expr) secs"
Run Code Online (Sandbox Code Playgroud)
工作原理:获取当前日期(以秒为单位),减去一天,再减去一天乘以当前工作日的数字,然后将这些秒转换回日期。
编辑:将 1.1 版本拼凑在一起后,可以正常工作:
date -d "1970.01.01-00:00:$(date +"%s - 86400 - %w * 86400"|xargs expr)"
Run Code Online (Sandbox Code Playgroud)
该工作版本基于代码读取:
} else if (t = *tm_time, sscanf(t_string, "%d.%d.%d-%d:%d:%d", &t.tm_year,
&t.tm_mon, &t.tm_mday,
&t.tm_hour, &t.tm_min,
&t.tm_sec) == 6) {
t.tm_year -= 1900; /* Adjust years */
t.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
Run Code Online (Sandbox Code Playgroud)