web-dev-qa-db-fra.com

Bash convertit l'époque à ce jour, affichant le mauvais moment

Comment se fait-il que la date se convertisse au mauvais moment?

result=$(ls /path/to/file/File.*)
#/path/to/file/File.1361234760790

currentIndexTime=${result##*.}
echo "$currentIndexTime"
#1361234760790

date -d@"$currentIndexTime"
#Tue 24 Oct 45105 10:53:10 PM GMT
46
bobbyrne01

Cet horodatage particulier est en millisecondes depuis l'époque, pas les secondes standard depuis l'époque. Divisez par 1000:

$ date -d @1361234760.790
Mon Feb 18 17:46:00 MST 2013
91
andrewdotn

Vous pouvez utiliser l'expansion arithmétique bash pour effectuer la division:

date -d @$((value/1000))

Notez que "value" est une variable bash avec le $ étant facultatif; c'est à dire., $value ou value peuvent être utilisés.

7
Richard Jessop

Pour Mac OS X, c'est date -r <timestamp_in_seconds_with_no_fractions>

$ date -r 1553024528
Tue Mar 19 12:42:08 PDT 2019

ou

$ date -r `expr 1553024527882 / 1000`
Tue Mar 19 12:42:07 PDT 2019

ou

$ date -r $((1553024527882/1000))
Tue Mar 19 12:42:07 PDT 2019
2
Marcus