Time::Beat - Module to convert between standard time and Swatch ".beat" time.


Time-Beat documentation Contained in the Time-Beat distribution.

Index


Code Index:

NAME

Top

Time::Beat - Module to convert between standard time and Swatch ".beat" time.

DESCRIPTION

Top

Time::Beat is a module to convert normal time to and from .beats, of which there are a thousand in a day. It can change normal time in time() format to .beats, and .beats into either 24-hour or 12-hour normal time.

SYNOPSIS

Top

    use Time::Beat qw(beat time24 time12);

    my $time_in_beats = beats($time);

    my $beats_in_24hr_time = time24($beat);

    my $beats_in_12hr_time = time12($beat);

METHODS

Top

There are three methods in Time::Beat.

* beats($time)

beats will give you the current time in .beats if you do not specify a time string. If you specify a string in time() format it will return that particular time in .beats. The basic algorithm for doing this is to take the time in GMT+1 hour, convert it into seconds, and divide by 86.4.

* time24($beat)

time24 takes a 3-digit beat time and outputs a 24-hour time along the lines of "12:34:56". The hours will have leading noughts.

* time12($beat)

time12 takes a 3-digit beat time and outputs a 12-hour time along the lines of "12:34:56 am" or "12:34:56 pm". Hours do not have leading noughts.

CHANGES

Top

Important: As of v1.11 the method names have changed. The former method names, beattime, timebeat24 and timebeat12 will still work, but they have been deprecated, and will be removed at some point in the future.

AUTHOR

Top

Earle Martin <emartin@cpan.org>. Originally written by James Duncan <jduncan@fotango.com>.

LICENSE

Top

This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

SEE ALSO

Top

* DateTime::Format::IBeat

This module by Iain Truskett <spoon@cpan.org> does much the same thing but in an OO fashion, and is part of the DateTime project; if you need something more sophisticated, I would suggest you look into that. My thanks also to Iain for contributing patches to this module.

* The .beat home page

http://www.swatch.com/itime_tools/itime.php


Time-Beat documentation Contained in the Time-Beat distribution.

package Time::Beat;

use strict;
use vars qw ( $VERSION @EXPORT_OK );

$VERSION = '1.21';

use Carp qw( croak );
use Exporter;

use base qw ( Exporter );
@EXPORT_OK = qw ( beats time24 time12 beattime timebeat24 timebeat12 );

# Note that the beattime, timebeat12 and timebeat24 methods are deprecated - see below.

sub beats {

    my $time = shift || time();

    unless ( $time =~ /^\d+$/ ) {
        croak "You can only use the 'beats' method with a number in the time() format."
    }

    return sprintf "%d", ( ( $time+3600 ) % 86400 ) / 86.4;
}

sub _beats_to_time {

    my $beat = shift;

    my $totalsecs = ( $beat * 86.4 );
    my $totalmins = int( $totalsecs / 60 );
    my $hours     = int( $totalmins / 60 );
    my $mins      = ( $totalmins % 60 );
    my $secs      = ( ( $totalsecs % 3600 ) % 60 );
    $hours--;
    $hours = 23 if $hours < 0;
    return ( $hours, $mins, $secs );
}

sub time24 {

    my $beat = shift;

    unless ( $beat =~ /^\d+$/ and $beat >= 000 and $beat <= 999 ) {
        return "You can only use the 'time24' method with a number in the range 000-999."
    }

    return sprintf "%02d:%02d:%02d", _beats_to_time( $beat );
}

sub time12 {

    my $beat = shift;

    unless ( $beat =~ /^\d+$/ && $beat >= 000 and $beat <= 999 ) {
        return "You can only use the 'time12' method with a number in the range 000-999."
    }

    my ( $hours, $mins, $secs ) = _beats_to_time( $beat );

    my $meridiem = ( $hours >= 12 ) ? "pm" : "am";
    $hours = $hours - 12 if $hours > 12;

    return sprintf "%d:%02d:%02d %s", $hours, $mins, $secs, $meridiem;
}

# DEPRECATED METHODS 
# These will be removed in the future.

sub beattime {
    my $time = shift || time();
    beats($time);
}

sub timebeat12 {
    my $beat = shift;
    time12($beat);
}

sub timebeat24 {
    my $beat = shift;
    time24($beat);
}

1;

__END__