#!/usr/bin/perl -w # (C) 2003-2007 Willem Jan Hengeveld # Web: http://www.xs4all.nl/~itsme/ # http://wiki.xda-developers.com/ # # $Id$ # use strict; use POSIX; #use Time::localtime; use File::stat; #use Date::Manip; use Getopt::Long; my $now= time(); #Date_Init("TZ=CET", "Internal=1"); my $timetype= "mtime"; GetOptions( "tc"=> sub { $timetype= "ctime"; }, "ta"=> sub { $timetype= "atime"; }, "tm"=> sub { $timetype= "mtime"; }, ); my @t; for (@ARGV) { if (-e $_) { push @t, ParseDate(timetodatemanip(stat($_)->$timetype)); } else { push @t, ParseDate($_); } } sub timetodatemanip { my $t= localtime shift; return $t; } for my $row (0..$#t) { for my $col (0..$row-1) { print("\t") if ($col); print DateCalc($t[$col], $t[$row]); } print("\n"); } sub currenttime { my @t= localtime $now; return ($t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]); } sub month { return 1 if $_[0] =~ /jan/i; return 2 if $_[0] =~ /feb|fev/i; return 3 if $_[0] =~ /mrt|mar/i; return 4 if $_[0] =~ /apr|avr/i; return 5 if $_[0] =~ /mei|may|mai/i; return 6 if $_[0] =~ /jun/i; return 7 if $_[0] =~ /jul/i; return 8 if $_[0] =~ /aug/i; return 9 if $_[0] =~ /sep|spt/i; return 10 if $_[0] =~ /o[kc]t/i; return 11 if $_[0] =~ /nov/i; return 12 if $_[0] =~ /dec/i; die "unrecognized month $_[0]\n"; } sub ParseDate { my $ts=shift; my ($y,$m,$d,$H,$M,$S)= currenttime(); if ($ts =~ /\S*:\S*/) { ($H,$M,$S)=map { $_+0 } split(/:/,$&); } if ($ts =~ /\S*[a-z][a-z][a-z]\S*/i) { for my $f (split(/\W+/, $&)) { if ($f =~ /[a-z]/i) { $m= month($f); } elsif ($f=~ /\d{4}/) { $y= $f; } else { $d= $f; } } } elsif ($ts =~ /\S*[-\/]\S*/) { ($y,$m,$d)=split(/\W+/, $&); } return POSIX::mktime($S,$M,$H,$d,$m-1,$y-1900); } sub DateCalc { return $_[1]-$_[0]; }