I have a date string in the following format Jul 27 23:59:59 2016 GMT
and I need to convert it to the equivalent epoch timestamp with the OS X BSD date
command.
GNU date
has a nice -d
/--date=STRING
argument:
$ date -d "Jul 27 23:59:59 2016 GMT" +'%s'
1469663999
The BSD date
command on OSX sadly has no such option.
date -j -f "<FORMAT>" "Jul 27 23:59:59 2016 GMT" +'%s'
seems to be the way to go, but I can't find the write format string. Apple's man page states:
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
can be used to parse the output from date and express it in Epoch time.
But that doesn't appear to be true:
$ date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
Failed conversion of ``Wed 13 Jul 2016 11:17:49 BST'' using format ``%a %b %d %T %Z %Y''
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
How can I convert a date string in this format to an epoch timestamp with the OS X BSD date
command?
I can't seem to get a version out of date
, but I'm on OS X 10.11.5
(El Capitan) if that's significant.
Using strftime() to convert Python datetime to epoch strftime() is used to convert string DateTime to DateTime. It is also used to convert DateTime to epoch. We can get epoch from DateTime from strftime().
Convert from human-readable date to epoch long epoch = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse("01/01/1970 01:00:00").getTime() / 1000; Timestamp in seconds, remove '/1000' for milliseconds. date +%s -d"Jan 1, 1980 00:00:01" Replace '-d' with '-ud' to input in GMT/UTC time.
Use the build-in date command and instruct it to output the number of seconds since 1970-01-01 00:00:00 UTC. You can do this by passing a format string as parameter to the date command. The format string for UNIX epoch time is '%s'. To convert a specific date and time into UNIX epoch time, use the -d parameter.
To convert date to timestamp, a formula can work it out. Select a blank cell, suppose Cell C2, and type this formula =(C2-DATE(1970,1,1))*86400 into it and press Enter key, if you need, you can apply a range with this formula by dragging the autofill handle.
Do you mean this?
date -j -f "%a %b %d %T %Z %Y" "Wed Jul 13 11:30:27 BST 2016" +"%s"
1468405827
I worked that out by telling date
to output in the same format as you were using:
date -j +"%a %b %d %T %Z %Y"
Your date
command is outputting the date in the following format:
Wed 13 Jul 2016 11:17:49 BST (Format sequence is: "%a %d %b %Y %T %Z")
and you're trying to parse it with an expression to match the following format:
Wed Jul 13 11:17:49 BST 2016 (Format sequence is: "%a %b %d %T %Z %Y")
Resulting in:
Failed conversion of ``Wed 13 Jul 2016 11:17:49 BST'' using format ``%a %b %d %T %Z %Y''
So, basically, you need to change the format sequence in your command with:
$ date -j -f "%a %d %b %Y %T %Z" "`date`" +"%s"
In order to match the Wed 13 Jul 2016 11:17:49 BST
format that your date
command is outputting by default.
To use a custom date based on the same format:
$ date -j -f "%a %d %b %Y %T %Z" "Wed 13 Jul 2016 11:17:49 BST" +"%s"
Some references on what [some of] the format string sequences mean:
I ran into an issue trying to convert a similar datetime
to epoch
. Thought I would put this out here for this format as well.
date -j -f "%Y-%m-%d %H:%M:%S" "2018-01-30 15:58:50" "+%s"
1517349530
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With