Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert date string to epoch timestamp with the OS X BSD `date` command?

Tags:

date

macos

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.

like image 850
tommarshall Avatar asked Jul 13 '16 10:07

tommarshall


People also ask

How do you convert date string to epoch time?

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().

How do I convert date to epoch date?

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.

How do you convert date to epoch time in bash?

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.

How do I manually convert a date to a timestamp in Unix?

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.


3 Answers

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"
like image 61
Mark Setchell Avatar answered Oct 19 '22 20:10

Mark Setchell


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)
like image 44
pah Avatar answered Oct 19 '22 20:10

pah


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

like image 5
Kenneth King Avatar answered Oct 19 '22 21:10

Kenneth King