convert unix seconds to date in other format

Posted on 1999-01-06
Last Modified: 2010-04-21
Is there a straight forward use of `date` to change
"seconds since the epoch" to some other date format?
I've worked on this on the command line but the
following lines best illustrate the problem.

@fir$ date +%s >time_tmp
@fir$ date  >>time_tmp
@fir$ cat time_tmp
Wed Jan  6 15:26:05 PST 1999
@fir$ date  +%D%t%r -f time_tmp
date: invalid date ` 915665157'
01/06/99        03:26:05 PM

Question by:2ndgrade
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
  • +3
LVL 84

Expert Comment

ID: 2008652
perl -e 'print scalar localtime shift' 915665157
LVL 51

Expert Comment

ID: 2008653
which OS? (-f option  is used to parse another format string, not a file, usually)

How about using
   date -u
  env TZ=PST date    # or the timezone you prefer

LVL 22

Expert Comment

ID: 2008654
how about:

echo 0t915665157=Y | adb
      1999 Jan  6 18:25:57
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 2008655
I'm running linux and bash.
@fir$ perl --version
This is perl, version 5.005_02 built for i586-linux
@fir$ perl -e 'print scalar localtime shift' 915741046
yields this:
@fir$ n  7 12:30:46 1999@fir$
@fir$ echo 0t915665157=Y | adb
bash: adb: command not found
What is the command `adb` on what OS and shell? Does "0t" designate that the digits following are to be interpreted as a date in unix seconds?

@fir$ date --version
date (GNU sh-utils) 1.16
excerpt from date --help  is

  -f, --file=DATEFILE      like --date once for each line of DATEFILE

I thought accessing the date string from a file made the problem clearer than all the quote produced obfuscation on the command line when using date --date=`some command`.
I have seen logging done which uses unix seconds as the timestamp and expected that the date command would be capable of transforming a timestamp in whatever format to whatever other format. This seems to be true with the exception of going from unix seconds to any other format.

LVL 84

Expert Comment

ID: 2008656
You seem to have printed over the "Thu Ja".
perl -e 'print "\n".(localtime shift)."\n"' 915741046

Expert Comment

ID: 2008657
if u need a string like timestamp use
date +"%Y%m%d%H%M%S"

Author Comment

ID: 2008658
There are any number of different date formats besides %Y%m%d%H%M%S  which could be called string-like. They aren't what's needed.
 What I want is date to do unix seconds->some other format.
I'm willing to be corrected, but I see nothing in the src for `date` which provides for doing this.
LVL 51

Expert Comment

ID: 2008659
> some other format
which format?
LVL 14

Expert Comment

ID: 2008660
Let's see, the requirement is that 'date' take seconds since the epoch as an argument and that you can use the already-there 'date' formatting directives to output a new date.  We also know that the source for the date command is available.

I'm fairly certain that no widely-available utility currently does this (though you'd think that someone would have modified date to do this long ago).

I'd say the easiest thing would be to modify the source to the date command.  Underneeth it all, date gets the current time from the time() system call.  Modify the code to add a new command-line option (say '-s seconds-since-epoch') and use the supplied argument instead of the result from the call to time().

You can do this even if you don't have permissions to install your version of date as the official/system version, since you can always modify your PATH to point at your version first.

Author Comment

ID: 2008661
Thanks for the comments.  Three weeks ago I wrote a wrapper for ctime() to do this job, deciding that it was more trouble than it was worth to maintain a local non-standard version of 'date'.
This question might as well get squashed.
LVL 14

Expert Comment

ID: 2008662
Thought of the ctime wrapper too, but decided that was more trouble than modifying date.   Oh well, either way.
LVL 14

Expert Comment

ID: 2008663
I suggest 2ndgrade submit his own answer and get the points :-)
LVL 14

Accepted Solution

chris_calabrese earned 100 total points
ID: 2008664
OK, since he hasn't done it yet, I'll do it.  The most appropriate answer for 2ngrade's problem is to write a ctime() wrapper :-)

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When you do backups in the Solaris Operating System, the file system must be inactive. Otherwise, the output may be inconsistent. A file system is inactive when it's unmounted or it's write-locked by the operating system. Although the fssnap utility…
FreeBSD on EC2 FreeBSD ( is a robust Unix-like operating system that has been around for many years. FreeBSD is available on Amazon EC2 through Amazon Machine Images (AMIs) provided by FreeBSD developer and security office…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question