• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1290
  • Last Modified:

Convert timestamp to epoch time and calculate hours plus conversion backwards

Dear experts, after my last problem I stumbled upon another one.

I need to convert "dd.mm.yyyy:hh24:mi:ss" to epoch time and add some hours to it (e.g. 4h). This output has to be compared to the current time/date.

I need to do so in ksh or perl. Any hints are welcome.
0
skahlert2010
Asked:
skahlert2010
  • 6
  • 3
1 Solution
 
sarathy_sriCommented:
#! /usr/bin/perl
my @time = localtime(time);
print "@time\n";

print scalar localtime(time);
0
 
deiaccordCommented:
You should be able to use the perl DateTime module to do what you want

Here is a quick example that takes a date string in the format you specify and prints the difference in hours from the current datetime.

use DateTime;

$datestring = "15.06.2005:15:30:30";
$datestring =~ m#(\d{2})\.(\d{2})\.(\d{4})\:(\d{2})\:(\d{2})\:(\d{2})#;
my $dt = DateTime -> new ( year => $3, month => $2, day => $1,
				hour => $4, minute => $5, second => $6);
				
$dt->add(hours => 4);

my $cmp = DateTime->now()-$dt;
print $cmp->in_units('hours');

Open in new window

0
 
skahlert2010Author Commented:
Hi sarathy_sri,

I only receive an error using that code ==> syntax error: `(' unexpected
0
Industry Leaders: 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!

 
skahlert2010Author Commented:
@deiaccord.

I fear perl is not the best soltion as the Perl DateTime Package is not installed on my Solaris machine. The solution needs to be universal in order to be applied on various hosts.

Any idea how to solve it differently? In Ksh maybe?

Otherwise you solution looks promising without being able to test it! Sorry!
0
 
deiaccordCommented:
I believe Time::Local is standard with most perl distributions so you should be able to use that to get the difference in epoc seconds though it's not quite as flexible.

use Time::Local;

$datestring = "15.06.2005:15:30:30";
$datestring =~ m#(\d{2})\.(\d{2})\.(\d{4})\:(\d{2})\:(\d{2})\:(\d{2})#;
$time = timelocal ($6,$5,$4,$1,$2-1,$3-1900); # seconds, mins, hours, mday, month (0-11), year (difference from 1900)
print "Difference is " . (time - $time) . " seconds\n";

Open in new window

0
 
skahlert2010Author Commented:
Hi deiaaccord,

thanks for your solution. I compiled a small perl script using your code and invoke it from within my shell script. However, I cannot pass a parameter to perl in order to bind $datestring.


In ksh:

/tmp/epoch.pl $LS

Open in new window

while LS equals "15.06.2005:15:30:30"

In Perl:

$datestring = $LS;

Open in new window


Do you have a hint?
0
 
skahlert2010Author Commented:
It seems to work with:

$datestring = $ENV{'LS'};

Open in new window

0
 
skahlert2010Author Commented:
Well unfortunately this works only if I export the Variable in ksh but not within the script.
Thus, the question is still open.
0
 
deiaccordCommented:
Glad you got it working, you could have also set it with the first argument to the script if you want to make it a more re-usable script

$datestring = $ARGV[0];

Open in new window

0
 
skahlert2010Author Commented:
Thanks a lot! Just what I needed! I appreciate your hint regarding passing the variable from ksh to perl with ARGV[n]!
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 6
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now