2ndgrade
asked on
convert unix seconds to date in other format
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
915665157
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
"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
915665157
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
perl -e 'print scalar localtime shift' 915665157
which OS? (-f option is used to parse another format string, not a file, usually)
How about using
date -u
or
env TZ=PST date # or the timezone you prefer
How about using
date -u
or
env TZ=PST date # or the timezone you prefer
how about:
echo 0t915665157=Y | adb
1999 Jan 6 18:25:57
echo 0t915665157=Y | adb
1999 Jan 6 18:25:57
ASKER
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
yields:
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.
@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
yields:
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.
You seem to have printed over the "Thu Ja".
Try:
perl -e 'print "\n".(localtime shift)."\n"' 915741046
Try:
perl -e 'print "\n".(localtime shift)."\n"' 915741046
if u need a string like timestamp use
date +"%Y%m%d%H%M%S"
19990111211355
date +"%Y%m%d%H%M%S"
19990111211355
ASKER
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.
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.
> some other format
which format?
which format?
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.
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.
ASKER
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.
This question might as well get squashed.
Thought of the ctime wrapper too, but decided that was more trouble than modifying date. Oh well, either way.
I suggest 2ndgrade submit his own answer and get the points :-)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.