12 hour clock and offset problem



I'm trying to convert an input time to the offset time in a 12 hour
clock system. It's giving me a headache. The am and pm must be the
right ones when the offset is added to the input time ($temptime). I
understand it's better to use a 24 hour clock, but unfortunately I
can't in this situation. Everything needs to be done in 12-hour
format.

In short, 10:00 am with an offset of -3 should result in 1:00 pm;
10:00 pm with an offset of -3 should result in 1:00 am.
I've been at this for awhile, sadly, and cannot wrap my head around
it. Any help to point me in the right direction would be fantastic.

This is my latest version, which works to a certain extent--the
difficulty is the AM/PM to switch.

my $offset = -3;
my $tempTime = "10:00 pm";
sub myMod {
my ( $a, $b ) = @_;
my $div = $a / $b;
return $a - int( $div ) * $b;
}
sub getutc {
my $time = shift;
my $GMTOffset = shift;
$time =~ /(\d{1,2}):(\d\d)\s(.+)*/;
# Is UTC a .5 remainder? if so, chop it off--we use
# it later regardless
my $hours = $1;
if (myMod($hours,int($hours)) == -0.5) {
$hours - 0.5;
}
my $minutes = $2;
my $ampm = $3;
#Take hours and subtract whole number in Offset Time
$hours = $hours - int($GMTOffset);
if ($hours >= 12) {
$ampm = "pm";
$hours = $hours - 12
}
# If 0.5 on the Offset, then add 30 minutes and wrap
if (myMod($GMTOffset, int($GMTOffset)) == -0.5) {
$minutes = $minutes + 30;
if ($minutes >= 60) {
$minutes = $minutes % 60;
$hours = $hours + 1;
}
}
$minutes = sprintf("%02d", $minutes);
$hours = sprintf("%2d", $hours);
if ($hours == 0) { $hours = "12";}
return $hours.":".$minutes." ".$ampm;
}

my $theTime = getutc($tempTime, $offset);
print "\nCurrent time: $tempTime\n";
print "Adjust ".$offset." hours\n";
print "Adjusted to: $theTime\n";

.



Relevant Pages

  • Re: 12 hour clock and offset problem
    ... clock system. ... It's giving me a headache. ... right ones when the offset is added to the input time. ...
    (comp.lang.perl.misc)
  • Re: 12 hour clock and offset problem
    ... clock system. ... right ones when the offset is added to the input time. ... format. ... my $GMTOffset = shift; ...
    (comp.lang.perl.misc)
  • Re: 12 hour clock and offset problem
    ... right ones when the offset is added to the input time. ... format. ... my $GMTOffset = shift; ...
    (comp.lang.perl.misc)
  • Re: 12 hour clock and offset problem
    ... clock system. ... right ones when the offset is added to the input time. ... "Adjust $offset hours\n", ...
    (comp.lang.perl.misc)
  • Re: Advice on good forth coding
    ... So I shift by 6 and check ... If the input is the actual offset, then you can pull off sign-extended ... jump and the location is in the same code section. ... you have to figure out how many rlits to add to the IF after you ...
    (comp.lang.forth)