#!/usr/bin/perl -w # NAME: test-str2time.pl # AIM: Just some tests.... # 07/07/2016 - Initial cut ###################################### use strict; use warnings; use Date::Parse; sub prt($) { print shift; } sub get_time_stg($) { my $elap = shift; my $negative = 0; my $units = ''; if ($elap < 0) { $negative = 1; $elap = -$elap; } if ( !($elap > 0.0) ) { return "0.0 s"; } if ($elap < 1e-21) { #// yocto - 10^-24 $elap *= 1e+21; $units = "ys"; } elsif ($elap < 1e-18) { #// zepto - 10^-21 $elap *= 1e+18; $units = "zs"; } elsif ($elap < 1e-15) { #// atto - 10^-18 $elap *= 1e+15; $units = "as"; } elsif ($elap < 1e-12) { #// femto - 10^-15 $elap *= 1e+12; $units = "fs"; } elsif ($elap < 1e-9) { #// pico - 10^-12 $elap *= 1e+9; $units = "ps"; } elsif ($elap < 1e-6) { #// nanosecond - one thousand millionth (10?9) of a second $elap *= 1e+6; $units = "ns"; } elsif ($elap < 1e-3) { #// microsecond - one millionth (10?6) of a second $elap *= 1e+3; $units = "us"; } elsif ($elap < 1.0) { #// millisecond $elap *= 1000.0; $units = "ms"; } elsif ($elap < 60.0) { $units = "s"; } else { my $secs = int($elap + 0.5); my $mins = int($secs / 60); $secs = ($secs % 60); if ($mins >= 60) { my $hrs = int($mins / 60); $mins = $mins % 60; if ($hrs >= 24) { my $days = int($hrs / 24); $hrs = $hrs % 24; return sprintf("%d days %2d:%02d:%02d hh:mm:ss", $days, $hrs, $mins, $secs); } else { return sprintf("%2d:%02d:%02d hh:mm:ss", $hrs, $mins, $secs); } } else { return sprintf("%2d:%02d mm:ss", $mins, $secs); } } my $res = ''; if ($negative) { $res = '-'; } $res .= "$elap $units"; return $res; } my $date = "2016-07-07 12:18:43"; my $date2 = "2016-07-07 12:18:48"; my $date3 = "2016-07-07 12:32:47"; # 825 - actual 844 my $date4 = "2016-07-07 12:52:08"; # 1960 - actual 2005 secs 33:25 mm:ss my $epock = str2time($date); my $ep2 = str2time($date2); my $ep3 = str2time($date3); my $ep4 = str2time($date4); my $diff2 = $ep2 - $epock; my $diff3 = $ep3 - $epock; my $diff4 = $ep4 - $epock; my $ts3 = get_time_stg($diff3); my $ts4 = get_time_stg($diff4); prt("str2time($date) = $epock\n"); prt("str2time($date2) = $ep2 - $diff2 secs\n"); prt("str2time($date3) = $ep3 - $diff3 secs $ts3\n"); prt("str2time($date4) = $ep4 - $diff4 secs $ts4\n"); # eof