'How to convert date string to epoch timestamp with the OS X BSD `date` command?
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.
Solution 1:[1]
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"
Solution 2:[2]
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:
- %a locale's abbreviated weekday name (e.g., Sun)
- %d day of month (e.g., 01)
- %b locale's abbreviated month name (e.g., Jan)
- %Y year
- %T time; same as %H:%M:%S
- %Z alphabetic time zone abbreviation (e.g., EDT)
Solution 3:[3]
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
Solution 4:[4]
Here's another way:
$ python -c 'import time
> print int(time.time())'
1468406482
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | Lab Lab |
Solution 4 |