计算自X以来的天数的聪明方法是什么?


11

自2014年11月17日起,我开始在目前的职位上工作。我想知道到目前为止已经有多少天了。关于如何使用Linux提出一个简单而又不错的解决方案的任何想法?


我最终在perl脚本中做了类似的事情。我使用timelocal()函数获取从纪元到给定日期的秒数(例如,2014年11月17日),然后从当前纪元日期中减去秒数,然后除以86400(以秒为单位)一天)。我确定有人会提供纯外壳解决方案:)
杰夫·谢勒

2
时间算术有很多奇怪的特殊情况。虽然减去UNIX时间戳并除以86,400这样的简单事情将为您提供一个近似的答案,但是最好使用考虑了特殊情况的专用时间库,例如Python的dateutil
里德

1
快速计算日期差异中的某些答案可能也有帮助。
manatwork


@ msh210,您将被禁止终身监禁,并被判处监禁1个月,同时为社区提供了古老的COBOL代码的代码清除程序。
ychaouche

Answers:


14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago

4
这使leap秒错误。我的意思是,这现在已经不重要,但是在大约一万年的时间内,累积的错误可能就足够了。
凯文

2
leap秒几率将引发大约.000001%的错误。与这种方法在观察夏令时的场所使用的错误天数相比,这可以忽略不计:2%的情况...
jlliagre

2
@Kevin:如果他想知道他在某处工作了几天,我们可以(直到进一步进行冷冻或医学治疗)不必对此太在意^^
Olivier Dulac

1
@jlliagre:%s是Unix时间,始终为UTC,缺少DST。
凯文

1
他很可能会想知道在办公室桌子后面空转的工作天数。由于该时间可能不在午夜左右,而是在上午8点至下午5点之间(并且date -d 2014/11/17给出了午夜的时间戳,因为没有提到时间),DST并不重要。
wurtel

5

好吧,表面上:

$ date --date="-239 days"
Mon Nov 17 15:25:40 CET 2014

在脚本中(不是很有效,但是...也许可以处理leap秒?;))

i=0
result=""
while [ "$result" != "20141117" ]
do
    i=$((i+1))
    result=$(date --date="-$i days" +%Y%m%d)
done
echo "$i" days have passed since "$result"

甚至ago可以理解:date --date="239 days ago"
数字创伤2015年

1
@DigitalTrauma太糟糕了,它没有本地化。例如,LC_ALL=ru_RU.utf8 date --date="239 дней назад"给我的结果与相同date --date="239"
罗斯兰

@Ruslan的确是:)
Digital Trauma

1

我在命令行上尝试了python。

$ python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"
246 days, 0:00:00 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.