BusyBox 的日期命令多年来一直是some discussion 的主题。显然,它并不总是像记录的那样工作,而且并不总是与以前的版本一样工作。
在我管理的运行 BusyBox v1.01 的 BB 系统上,我可以使用 -d 选项和 MMDDhhmmYYYY.ss 格式的日期,而我没有尝试过其他格式。幸运的是,输出格式按预期工作,大概是因为date 根据comments in the source 使用了正确的strftime()。
这是我的正反示例:
[~] # busybox date '+%m%d%H%M%Y.%S'
090500152016.41
[~] # busybox date -d 090500152016.41
Mon Sep 5 00:15:41 EDT 2016
那么..我们可以用这个做什么?看来我们不能随意调整秒数,因为它只读取前两位数:
[~] # busybox date -d 123119001969.65 '+%s'
65
[~] # busybox date -d 123119001969.100 '+%s'
10
好吧,事实证明您可以使用“无效”数字加载日期字段。
[~] # busybox date 090100002016
Thu Sep 1 00:00:00 EDT 2016
[~] # busybox date 093400002016
Wed Oct 4 00:00:00 EDT 2016
[~] # busybox date 09-200002016
Mon Aug 29 00:00:00 EDT 2016
所以让我们使用基于%w 的东西来调整“天”字段。
today=$(busybox date '+%m%d%H%M%Y')
last_sat=$(busybox date -d "${today:0:2}$( printf '%02d' $(( 10#${today:2:2} - 1 - $(busybox date '+%w') )) )${today:4}" '+%F')
这只是减去第二个字段中的数字(日期字符串的第 3 和第 4 个字符)。它显然要求你的 shell 要么是 bash 要么理解 bash 风格的数学符号 ($((...)))。数学方面,只要“上一个星期六”在同一个月内,它就应该工作,并且它可以工作(我没有测试过)与上个月的翻转(根据上面的最后一个测试)。
我建议您只安装一个 GNU date 二进制文件,而不是跳过这些棘手的问题,并且不要为这个二进制文件使用 busybox。 :-P
祝你好运!