Get date of some UNIX time - bash

How can I convert UNIX time to date format?
Smth like
$> date ???? 1300000000
Mar 13 2011 07:06:40 GMT

Your date command might understand the # prefix. Try:
$ date -d #1300000000
Sun Mar 13 08:06:40 CET 2011

If -d doesn't work for you, thats probably because it only works like that for GNU date.
For BSD, OSX, etc. one would ordinarily use:
date -r 1300000000

Related

How to pass hours and minutes to date command through -d option

I know how to format a date in bash using the date command
date -d 20160304 +%Y%m%d
for example. But now I want to pass a date and time and return the hours and minutes. I know the output format I need is +%H%M, but I don't know how to format the date string and it is not in the man pages.
For example if I try any of these:
date -d 201801010500 +%H%M
date -d 20180101_0500 +%H%M
date -d 2018-01-01_0500 +%H%M
date -d 2018:01:01-05:00 +%H%M
I get an "invalid date" error. When I search google I always find answer referring to the output format, not the input format...
GNU date accepts these format, among others I'm sure
$ date -d '2018-02-16 12:34'
Fri Feb 16 12:34:00 EST 2018
$ date -d '2018-02-16T12:34:56'
Fri Feb 16 12:34:56 EST 2018
$ date -d '2018-02-16T12:34:56Z'
Fri Feb 16 07:34:56 EST 2018
In general, can't go wrong with ISO8601 time formats
I'm in Canada/Eastern time zone
The date utility is pretty impressive in making sense of different arguments for the -d option.
Here is just one example:
$ date -d "20180101 05:00:00"
Mon Jan 1 05:00:00 +07 2018
Note +07 is the local timezone.

Add X days to a particular date in BASH

Totally new to BASH. Apologies in advance.
Problem
I'd like to add X days to a specific date.
Code
I figured out that date in BASH retrieves the current date.
I also figured out that I can add X days to the current date in the following way,
expiration_date=$ date -v +1d
which gives,
Tue Sep 26 20:28:13 CEST 2017
which is indeed the date of writing plus X=1 days.
Question
In stead of date in the command line above, I'd like to insert a particular date to which X days will be added, e.g. 20/09/2017.
Don't care about the format of the particular date.
In other words: How do I make the following work,
expiration_date=$ '20/09/2017' -v +1d
Tried this answer, but doesn't do what I want.
Edit: Did not know things are different for OSX.
You can do this way:
dt='2017-09-20'
date -d "$dt +1 day"
Thu Sep 21 00:00:00 EDT 2017
date -d "$dt +2 day"
Fri Sep 22 00:00:00 EDT 2017
It seems OP is using OSX. You can use date addition this way:
s='20/09/2017'
date -j -v +1d -f "%d/%m/%Y" "$s"
Thu Sep 21 14:49:51 EDT 2017
You can do something like this:
date -d "Sun Sep 6 02:00:00 IST 2012+10 days"

How to convert local date-time string to Unix timestamp (GMT)?

time_var="6/23/2016 3:20:00 AM"
(this is in EDT)
We need to get unix timestamp for this variable after converting its value to GMT.
Just use the -u flag while passing the date with -d:
$ time_var="6/23/2016 3:20:00 AM"
$ date -d"$time_var EDT" -u
Thu Jun 23 07:20:00 UTC 2016
Note I also appended EDT to your date.
From man date:
-d, --date=STRING
display time described by STRING, not 'now'
-u, --utc, --universal
print or set Coordinated Universal Time

Invalid date format in bash

I'm having trouble with checking time since EPOCH. (and late subtract it from another one).
I get the date like this:
var=$(date)
echo $var
wto, 1 mar 2016, 16:00:14 CET
and later I'm trying to turn it into seconds since epoch:
date -d "$var" +"%s"
date: invalid date ‘wto, 1 mar 2016, 16:00:14 CET’
I'm giving this just as an example. Actually I will be reading the date from file, written in default locale format (I'm operating on couple different machines).
if you type date -h there is the reason why you got this error.
the -d option MUST be declared only with TIME and not with complete DATE format
-d,--date TIME Display TIME, not 'now'
so
date -d "23:59:59"
then:
Tue Mar 1 23:59:59 2016
if you need get only the seconds from a date you have to execute this:
date +"%S"
if you use the -d the output will be deplyed in msec

"date -d" doesn't accept ISO 8601 format

Am I doing something wrong? I can't believe date -d does not accept its own output when I use the ISO 8601 option with seconds. I either have to remove the 'T' or the timezone to get it to work.
> date -Iseconds
2014-01-14T11:07:57-0800
> date -d "2014-01-14T11:07:57-0800"
date: invalid date `2014-01-14T11:07:57-0800'
> date -d "2014-01-14 11:07:57-0800" # remove the 'T'
Tue Jan 14 11:07:57 PST 2014
> date -d "2014-01-14T11:07:57" # remove the timezone
Mon Jan 13 20:07:57 PST 2014
My current solution is to use date +"%Y-%m-%d %T %z" instead of date -Iseconds but I just thought that was strange.
Perhaps your locale is interfering with the date parsing?
Try specifying the time locale:
$ LC_TIME=C date -d "2014-01-14T11:07:57-0800"
Tue Jan 14 11:07:57 PST 2014
This works for me with GNU date 8.13.
GNU coreutils have only supported ISO 8601 dates as input since version 8.13 (released on 2011-09-08).
Thanks to #John1024 for the reference to
https://unix.stackexchange.com/questions/107750/how-to-parse-iso8601-dates-with-linux-date-command

Resources