package Mail::Exchange::Time; =head1 NAME Mail::Exchange::Time - time object to convert between unix time and MS time =head1 SYNOPSIS use Mail::Exchange::Time; my $now=Mail::Exchange::Time->new($unixtime); my $now=Mail::Exchange::Time->from_mstime($mstime); print $now->unixtime; print $now->mstime; use Mail::Exchange::Time qw(mstime_to_unixtime unixtime_to_mstime); print mstime_to_unixtime($mstime); print unixtime_to_mstime($unixtime); =head1 DESCRIPTION A Mail::Exchange::Time object allows you to convert between unix time and the time used internally in by Microsoft, which is defined as number of 100-nsec-intervals since Jan 01, 1901. =cut use strict; use warnings; use 5.008; use Exporter; use vars qw ($VERSION @ISA @EXPORT_OK); @ISA=qw(Exporter); @EXPORT_OK=qw(mstime_to_unixtime unixtime_to_mstime); $VERSION=0.03; =head2 new() $now=Mail::Exchange::Time->new(time()) Creates a time object from unix time. =cut sub new { my $class=shift; my $time=shift; my $self={ unixtime => $time, mstime => unixtime_to_mstime($time), }; bless $self; } =head2 from_mstime() $now=Mail::Exchange::Time->from_mstime(129918359788540682) Creates a time object from unix time. =cut sub from_mstime { my $class=shift; my $time=shift; my $self={ mstime => $time, unixtime => mstime_to_unixtime($time), }; bless $self; } =head2 unixtime() $unixtime=$now->unixtime() Returns the unix time from a time object. =cut sub unixtime () { my $self=shift; return $self->{unixtime}; } =head2 mstime() $mstime=$now->mstime() Returns the Microsoft time from a time object. =cut sub mstime () { my $self=shift; return $self->{mstime}; } =head2 mstime_to_unixtime() use Mail::Exchange::Time qw(mstime_to_unixtime) $unixtime=mstime_to_unixtime(129918359788540682) Converts a microsoft time to unix format. =cut sub mstime_to_unixtime { my $mstime=shift; return ($mstime - 116_444_736_000_000_000)/10_000_000; } =head2 unixtime_to_mstime() use Mail::Exchange::Time qw(unixtime_to_mstime) $mstime=unixtime_to_mstime(time()) Converts a unix time to microsoft format. =cut sub unixtime_to_mstime{ my $unixtime=shift; return $unixtime * 10_000_000 + 116_444_736_000_000_000; }