Xからの日数を数えるスマートな方法は何ですか?


11

2014年11月17日から現在のポジションで働き始めました。今まで何日かかったか知りたいです。Linuxを使用してシンプルで優れたソリューションを作成する方法についてのアイデアはありますか?


私はPerlスクリプトで同様のことをしました。timelocal()関数を使用して、エポックから指定された日付までの秒数(たとえば、2014年11月17日)を取得し、それを現在のエポック日付(秒)から減算して、86400(秒日)。誰かがシェルのみの解決策を思いつくでしょう:)
Jeff Schaller

2
時間演算には、厄介な特別なケースがたくさんあります。UNIXタイムスタンプを減算して86,400で除算するような単純なものでおおよその答えが得られますが、Pythonなどの特殊なケースを考慮した専用のタイムライブラリを使用する方がよいでしょうdateutil
Reid

1
日付の違いすばやく計算するの回答の一部は、ここでも役立つ場合があります。
manatwork 2015


@ msh210コミュニティが古代のCOBOLコードのコードクリーナーとして機能している間、あなたは終身禁止され、1か月の刑を宣告されます。
ychaouche 2017

回答:


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

4
これはうるう秒が間違っています。つまり、ではほとんど問題になりませんが、1 万年程度で、蓄積されたエラーは問題になるほどで​​す。
ケビン

2
うるう秒は約.000001%でエラーをトリガーします。これは、夏時間が観察されるロケールでこのメソッドが与える誤った日数と比較すると無視できます:ケースの2%...
jlliagre

2
@ケビン:彼がどこで働いた日数を知りたいのなら、私たちは(極低温化または医学のさらなる進歩まで)これについてあまり気にしないことができます^^
Olivier Dulac

1
@jlliagre:%sはUnix時間で、常にUTCであり、DSTがありません。
ケビン

1
おそらく、彼は仕事で彼の机の後ろでアイドリングしている間に雇われた日数について疑問に思うでしょう。おそらく午前0時頃ではないのですが、午前8時から午後5時の間にあるため(そしてdate -d 2014/11/17、時刻が明記されていないため、午前0時のタイムスタンプが示されます)、DSTは関係ありません。
ウルテル、2015

5

まあ、それの表面上:

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

スクリプトでは(あまり効率的ではありませんが、おそらくうるう秒を処理しますか?;))

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確かに:)
デジタルトラウマ

1

コマンドラインでpythonを試しました。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.