Re: Date to Epoch (updated)
by haukex (Archbishop) on Mar 20, 2018 at 13:56 UTC
|
perl -MPOSIX -e 'print strptime(<stdin>, "%s")'
For some reason, Perl's POSIX does not provide strptime, you'd need to install and use POSIX::strptime.
But if you have or can install the module Time::Piece (in core since 5.10), you can use its Time::Piece->strptime(STRING, FORMAT), it has a nicer interface.
Update:
$ echo "Mar 20 2018 09:00" | perl -wMstrict -MTime::Piece -nle 'print
+Time::Piece->strptime($_,"%b %d %Y %H:%M")->epoch'
1521536400
If you want to use POSIX::strptime, you should also look into mktime, although at that point I'd really recommend using a better module. I usually use DateTime because it supports almost everything you'd need, but for simple tasks Time::Piece is enough.
| [reply] [d/l] [select] |
|
|
| [reply] [d/l] |
|
|
Thank you for the reply
Time::Piece does not work in core 5.10, and I am unable to install any modules
I did run across the following code though:
print -e 'print scalar timelocal(2,16,10,20,2,2018)'
This solution, however would require me to use external variables in some way
echo "2,16,10,10,20,2,2018" | perl -e 'print scalar timelocal(<stdin>)'
Does not recognize the data being pushed
| [reply] [d/l] [select] |
|
|
Time::Piece does not work in core 5.10
I'm not sure what you mean? In my installations of 5.10.0 and 5.10.1 with Time::Piece 1.12 resp. 1.15 the code I showed works fine. If you are having trouble, see How do I post a question effectively?
I am unable to install any modules
That's unlikely - see Yes, even you can use CPAN and local::lib.
If all you're doing is converting a date, perhaps see date, although it can't do quite as much as the Perl modules I've named.
$ date -d "Mar 20 2018 09:00" +"%s"
1521532800
Note there is a discrepancy of one hour to the output in my example above, most likely due to different time zone handling. It's always best to include time zone information with date/time strings or objects to avoid ambiguity. | [reply] [d/l] |
|
|
| [reply] |
A reply falls below the community's threshold of quality. You may see it by logging in. |
Re: Date to Epoch
by Anonymous Monk on Mar 20, 2018 at 15:16 UTC
|
If you have a file, and need its epoch date, probably easiest is to stat it directly
$ perl -we 'print +(stat pop)[9]' myfile.txt
1521558861
| [reply] [d/l] |
|
|
| [reply] |
Re: Date to Epoch
by thanos1983 (Parson) on Mar 20, 2018 at 16:15 UTC
|
#!/usr/bin/perl
use strict;
use warnings;
use Date::Manip;
my $filename = 'test.log';
my $epochSecs = (stat($filename))[9];
print "Date: " . UnixDate( ParseDateString("epoch $epochSecs"), "%Y-%m
+-%d %T" ) . "\n";
The module Date::Manip is compatible with you Perl version, if you can install it will run on Solaris 10. Solaris 10 runs on perl 5.8.4 ref perl 5.8.4 package for solaris 10.
Hope this helps, BR.
Seeking for Perl wisdom...on the process of learning...not there...yet!
| [reply] [d/l] [select] |
Re: Date to Epoch
by Anonymous Monk on Mar 20, 2018 at 14:56 UTC
|
I have found a way to do this but it is messy:
perl -MPOSIX -MTime::Local -se 'print scalar timelocal($a, $b, $c, $d, $e, $f)' -- -a=$sec -b=$min -c=$hour -d=$day -e=$month -f=$year
Is there a more simpler approach as the one proposed earlier?
| [reply] [d/l] |
|
|
The root node shows the date as a single string (without seconds), but now you have what look like individual bash variables $sec, $min, etc. - where did those come from? Perhaps you could provide us with more context (surrounding code, etc.). See also I know what I mean. Why don't you?
| [reply] [d/l] [select] |
|
|
My apology
Running:
ls -oglE <file_name> | awk '{print $4":"$5}' | cut -d. -f1
will provide with me a date format of: 2018-03-15:09:25:15
I can then parse this data and assign it to individual variables like seconds, minutes, hours, day, month, year
But I was hoping to find a simple one line solution to take a format of "Mar 15 09:25:29 2018" and get an epoch time
| [reply] [d/l] |
Re: Date to Epoch
by Anonymous Monk on Mar 20, 2018 at 13:53 UTC
|
Also, this version of bash does not allow %s
| [reply] |
| A reply falls below the community's threshold of quality. You may see it by logging in. |