Assalamualaikum wr. wb.

P11 wrote:
> Kalo aku pake Package "Date::DateCalc"
> 
> #!perl -w
> use Date::DateCalc qw(date_time_difference);
> 
> ($days,$hh,$mm,$ss) = date_time_difference
> (
>       $year1,$month1,$day1,$hh1,$mm1,$ss1,
>       $year2,$month2,$day2,$hh2,$mm2,$ss2
> );
> 
> tinggal conversi aja outputnya ke menit.....
> 
> Zakaria wrote:
[sensor]
> > Bagaimana caranya menghitung selisih antara dua string tanggal
> > hasil output `date` sehingga menghasilkan menit?

Terimakasih atas informasinya dan sedikit koreksi waktu saya cari
di CPAN http://www.perl.com/CPAN/ modulenya yang ada adalah Date::Calc
dan functionnya namanya Delta_DHMS.

Berikut script perl untuk mengubah dari file log:
--------------------------------------------------------
Connection to CBN started: Wed Feb 23 17:03:33 JAVT 2000
By prayudy
Stop: Wed Feb 23 17:18:47 JAVT 2000
Connection to CBN started: Wed Feb 23 17:35:22 JAVT 2000
By herman
Stop: Wed Feb 23 17:49:29 JAVT 2000
Connection to CBN started: Wed Feb 23 18:00:38 JAVT 2000
By root
Stop: Wed Feb 23 18:24:44 JAVT 2000
Connection to CBN started: Wed Feb 23 20:46:10 JAVT 2000
By wisnu
Stop: Wed Feb 23 21:03:37 JAVT 2000
--------------------------------------------------------

Menjadi tab separated:
---------------------------------------
user    ISP     mulai   selesai minutes
prayudy CBN     2000-2-23 17:03:33      2000-2-23 17:18:47      15
herman  CBN     2000-2-23 17:35:22      2000-2-23 17:49:29      14
root    CBN     2000-2-23 18:00:38      2000-2-23 18:24:44      24
wisnu   CBN     2000-2-23 20:46:10      2000-2-23 21:03:37      17
---------------------------------------

Source:
--------------------------------------------------------
#!/usr/bin/perl -w
# Program to analize ppp-log file that has a format like this
#   Connection to CBN started: Thu Feb 24 10:08:40 JAVT 2000
#   By zakaria
#   Stop: Thu Feb 24 10:15:56 JAVT 2000

use Date::Calc qw(:all);

$status=1;
print "user\tISP\tmulai\tselesai\tminutes\n";
while ( <STDIN> ) {
  if ($status == 1 && /^Connection to (\S+) started: (.*)$/ ) {
    $isp = $1;
    $start = $2;
    $status = 2;
  } elsif ($status == 2 && /^By (.*)$/ ) {
    $who = $1;
    $status = 3;
  } elsif ($status == 3 && /^Stop: (.*)$/ ) {
    $end = $1;
    @st = ($s_year, $s_month, $s_day, $s_hour, $s_min, $s_sec)
        = parse_date($start);
    @end = ($e_year, $e_month, $e_day, $e_hour, $e_min, $e_sec)
        = parse_date($end);
    $num = num_minutes( @st, @end );
    print "$who\t$isp\t$s_year-$s_month-$s_day $s_hour:$s_min:$s_sec\t"
.
          "$e_year-$e_month-$e_day $e_hour:$e_min:$e_sec\t$num\n" ;
    $status = 1;
  } else {
    print STDERR "Log format error:\n$. : ($status) $_";
  }
}

# Subtrack two values and return minutes
sub num_minutes {
  my ($days, $hh, $mm) = Delta_DHMS (@_);
  return $mm + ($hh * 60) + ($days * 24 * 60);
}

# Convert string date "Thu Feb 24 12:01:40 JAVT 2000" to
# (year, month, date, hour, minutes, second)
sub parse_date {
  ($date) = @_;
  my($month, $day, $time, $year) = (split (/\s+/, $date) ) [1..3,5];
  my($hh, $mm, $ss) = split /:/, $time;
  $month = Decode_Month($month);
  return ($year, $month, $day, $hh, $mm, $ss);
}
--------------------------------------------------------



Wassallam,




-- Zakaria
    
PT. Asia Karsa Indah               [EMAIL PROTECTED]
Advanced Technologies              [EMAIL PROTECTED]
Jl. Raya Kalimalang 4B, Jakarta    [EMAIL PROTECTED]
Telp : (62-21) 8649318             http://www.asia-karsa.com
Fax  : (62-21) 8649316             http://linux.or.id/pemula

--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]

Kirim email ke