CHALLENGE: Timezone calculator.

Announce and discuss the progress of your various programming-related projects...programs, games, websites, tutorials, libraries...anything!

Moderators: Pete, Mods

Seb McClouth

Post by Seb McClouth »

Okay... I've taken the first code and implented the method which I used
to calculate with in the 2nd version...

This is what came out:

Code: Select all

'(C) 2005, by Sebastian McClouth 
DECLARE FUNCTION GA$ (Value AS STRING) 
DECLARE FUNCTION Milit$ (Value AS STRING) 
DECLARE FUNCTION CC$ (Value AS INTEGER) 
CLS 
LOCATE , 20: PRINT "Universal TimeZone Calculator" 
LOCATE , 20: PRINT "-----------------------------" 
LOCATE , 32: PRINT "TIMEZONES:" 
LOCATE , 30: PRINT "GMT  0: LONDON" 
LOCATE , 1: PRINT "GMT -1: REYKJAVIK"; : LOCATE , 48: PRINT "GMT +1: BERLIN" 
LOCATE , 1: PRINT "GMT -2: GREENLAND"; : LOCATE , 48: PRINT "GMT +2: CAIRO" 
LOCATE , 1: PRINT "GMT -3: RIO DE JANEIRO, BRAZIL"; : LOCATE , 48: PRINT "GMT +3: MOSCOW" 
LOCATE , 1: PRINT "GMT -4: SANTIAGO DE CHILE"; : LOCATE , 48: PRINT "GMT +4: STALINGRAD" 
LOCATE , 1: PRINT "GMT -5: NEW YORK"; : LOCATE , 48: PRINT "GMT +5: KARACHI" 
LOCATE , 1: PRINT "GMT -6: CHICAGO"; : LOCATE , 48: PRINT "GMT +6: OMSK, RUSSIA" 
LOCATE , 1: PRINT "GMT -7: DENVER"; : LOCATE , 48: PRINT "GMT +7: BANGKOK" 
LOCATE , 1: PRINT "GMT -8: SEATTLE"; : LOCATE , 48: PRINT "GMT +8: HONG KONG, AND CHINA" 
LOCATE , 1: PRINT "GMT -9: ALASKA"; : LOCATE , 48: PRINT "GMT +9: TOKYO" 
LOCATE , 1: PRINT "GMT-10: HONOLULU"; : LOCATE , 48: PRINT "GMT+10: SYDNEY" 
LOCATE , 1: PRINT "GMT-11: MIDWAY ISLANDS"; : LOCATE , 48: PRINT "GMT+11: SOLOMON ISLANDS" 
LOCATE , 48: PRINT "GMT+12: NEW ZEALAND" 
PRINT 
PRINT STRING$(80, "-") 
PRINT "If giving e.g. GMT+1, etc, give as input 1, etc." 
PRINT 
PRINT "Enter FROM timezone: "; : INPUT "", FTz% 
PRINT "Enter GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))) + " respective time as e.g. 14:00: "; : INPUT "", LocalTime$ 
PRINT : PRINT "Enter TO timezone: "; : INPUT "", TTz% 

IF FTz% <= -12 THEN FTz% = 12                    'As stated, -12 doesn't exist. 
IF FTz% > 12 THEN FTz% = -11                     'Not sure if this is correct, but it 
IF TTz% <= -12 THEN TTz% = 12                    'seems logical. 
IF TTz% > 12 THEN TTz% = -11

'Adjust LocalTime$ from FTz% to TTz% 
'------------------------------------ 
DateAdjust = 0                          'Standard. If not changed not adjust.

'First we bring LocalTime$ back to GMT: 
NLocalTime% = VAL(LEFT$(LocalTime$, 2)) 

IF NLocalTime% - FTz% < 0 OR NLocalTime% - FTz% > 24 THEN 
  IF NLocalTime% - FTz% < 0 THEN 
    NTTime% = 24 - (NLocalTime% - FTz%) 
    NDateAdjust = -1 
  ELSEIF NLocalTime% - FTz% > 24 THEN 
    NTTime% = (NLocalTime% - FTz%) - 24 
    NDateAdjust = 1 
  END IF 
ELSE 
  NTTime% = (NLocalTime% - FTz%) 
  NDateAdjust = 0 
END IF 

'Okay, we moved FTz% to GMT, now we gonna move GMT to TTz% 
IF NTTime% + TTz% < 0 OR NTTime% + TTz% > 24 THEN 
  IF NTTime% + TTz% < 0 THEN 
    TTime% = 24 - (NTTime% + TTz%) 
    NDateAdjust = -1 
  ELSEIF NTTime% + TTz% > 24 THEN 
    TTime% = (NTTime% + TTz%) - 24 
    NDateAdjust = 1 
  END IF 
ELSE 
  TTime% = (NTTime% + TTz%) 
  DateAdjust = 0 
END IF 
ToTime$ = LTRIM$(RTRIM$(STR$(TTime%))) + ":" + RIGHT$(LocalTime$, 2) 

'The DateAdjust?
NTime% = VAL(LEFT$(LocalTime$, 2))      'Retrieve the hours from LocalTime$ 

TzToPass% = -FTz% + TTz%                'Get the total timezones to pass 

N2Time% = NTime% + TzToPass%            'Calculate the NewTime 


IF N2Time% < 0 THEN                     'If N2Time% goes below zero 
   DateAdjust = -1                        'Date needs adjustment 
ELSEIF N2Time% > 23 THEN                'If N2Time% goes over 24 
   DateAdjust = 1                         'Date needs adjustment 
END IF
 
PRINT 

LOCATE , 1: PRINT "TIMEZONES:"; 
LOCATE , 20: PRINT "COUNTRY/CITY:"; 
LOCATE , 46: PRINT "LOCAL TIME:"; 
LOCATE , 60: PRINT "APROX. DATE ADJUST:" 
PRINT STRING$(80, "-") 
LOCATE , 1: PRINT "FROM: "; 
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))); 
LOCATE , 20: PRINT CC$(FTz%); 
LOCATE , 46: PRINT LocalTime$ 
LOCATE , 1: PRINT "TO:"; 
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(TTz%)))); 
LOCATE , 20: PRINT CC$(TTz%); 
LOCATE , 46: PRINT LTRIM$(RTRIM$(ToTime$)); 
IF LTRIM$(RTRIM$(STR$(DateAdjust))) = "1" THEN
  LOCATE , 60: PRINT "+1"
ELSE
  LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
END IF

FUNCTION CC$ (Value AS INTEGER) 
IF Value = 12 THEN CC$ = "New Zealand" 
IF Value = 11 THEN CC$ = "Solomon Islands" 
IF Value = 10 THEN CC$ = "Sydney" 
IF Value = 9 THEN CC$ = "Tokyo" 
IF Value = 8 THEN CC$ = "Hong Kong, and China" 
IF Value = 7 THEN CC$ = "Bangkok" 
IF Value = 6 THEN CC$ = "Omsk, Russia" 
IF Value = 5 THEN CC$ = "Karachi" 
IF Value = 4 THEN CC$ = "Stalingrad" 
IF Value = 3 THEN CC$ = "Moscow" 
IF Value = 2 THEN CC$ = "Cairo" 
IF Value = 1 THEN CC$ = "Berlin" 
IF Value = 0 THEN CC$ = "London" 
IF Value = -1 THEN CC$ = "Reykjavik" 
IF Value = -2 THEN CC$ = "Greenland" 
IF Value = -3 THEN CC$ = "Rio de Janeiro, Brazil" 
IF Value = -4 THEN CC$ = "Santiago de Chile" 
IF Value = -5 THEN CC$ = "New York" 
IF Value = -6 THEN CC$ = "Chicago" 
IF Value = -7 THEN CC$ = "Denver" 
IF Value = -8 THEN CC$ = "Seattle" 
IF Value = -9 THEN CC$ = "Alaska" 
IF Value = -10 THEN CC$ = "Honolulu" 
IF Value = -11 THEN CC$ = "Midway Island" 
END FUNCTION 

FUNCTION GA$ (Value AS STRING) 
IF VAL(Value) > 0 THEN 
  GA$ = "+" + Value 
ELSEIF Value = "0" THEN 
  GA$ = " " + Value 
ELSE 
  GA$ = Value 
END IF 
END FUNCTION 

FUNCTION Milit$ (Value AS STRING) 
IF LEN(Value) < 5 THEN 
  Milit$ = "0" + Value 
END IF 
END FUNCTION
I hope this works.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Seb,

It was running real good until I entered the following:

FROM: GMT -5
time at FROM: 01:00
TO....: GMT -7

Result said it was 25:00 at GMT-7 ....(It should be 23:00)
with a date adjustment of -1 which is correct.

Should be a minor problem. Fix it and we'll try again.
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

Minor problem... I can't fix yet... I'm trying it with some other code I've coded... Darn... It should have worked just fine... Well... back to the drawing table...

grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

Okay... back.. I think I found the bug... My mathematics part... I rewrote (not rebuild) it... (Back the the drawing table hehehe)... I wrote all the math down on a paper and started from scratch with that... A tiny adjustment... and voila:

Code: Select all

'(C) 2005, by Sebastian McClouth
DECLARE FUNCTION GA$ (Value AS STRING)
DECLARE FUNCTION Milit$ (Value AS STRING)
DECLARE FUNCTION CC$ (Value AS INTEGER)
CLS
LOCATE , 20: PRINT "Universal TimeZone Calculator"
LOCATE , 20: PRINT "-----------------------------"
LOCATE , 32: PRINT "TIMEZONES:"
LOCATE , 30: PRINT "GMT  0: LONDON"
LOCATE , 1: PRINT "GMT -1: REYKJAVIK"; : LOCATE , 48: PRINT "GMT +1: BERLIN"
LOCATE , 1: PRINT "GMT -2: GREENLAND"; : LOCATE , 48: PRINT "GMT +2: CAIRO"
LOCATE , 1: PRINT "GMT -3: RIO DE JANEIRO, BRAZIL"; : LOCATE , 48: PRINT "GMT +3: MOSCOW"
LOCATE , 1: PRINT "GMT -4: SANTIAGO DE CHILE"; : LOCATE , 48: PRINT "GMT +4: STALINGRAD"
LOCATE , 1: PRINT "GMT -5: NEW YORK"; : LOCATE , 48: PRINT "GMT +5: KARACHI"
LOCATE , 1: PRINT "GMT -6: CHICAGO"; : LOCATE , 48: PRINT "GMT +6: OMSK, RUSSIA"
LOCATE , 1: PRINT "GMT -7: DENVER"; : LOCATE , 48: PRINT "GMT +7: BANGKOK"
LOCATE , 1: PRINT "GMT -8: SEATTLE"; : LOCATE , 48: PRINT "GMT +8: HONG KONG, AND CHINA"
LOCATE , 1: PRINT "GMT -9: ALASKA"; : LOCATE , 48: PRINT "GMT +9: TOKYO"
LOCATE , 1: PRINT "GMT-10: HONOLULU"; : LOCATE , 48: PRINT "GMT+10: SYDNEY"
LOCATE , 1: PRINT "GMT-11: MIDWAY ISLANDS"; : LOCATE , 48: PRINT "GMT+11: SOLOMON ISLANDS"
LOCATE , 48: PRINT "GMT+12: NEW ZEALAND"
PRINT
PRINT STRING$(80, "-")
PRINT "If giving e.g. GMT+1, etc, give as input 1, etc."
PRINT
PRINT "Enter FROM timezone: "; : INPUT "", FTz%
PRINT "Enter GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))) + " respective time as e.g. 14:00: "; : INPUT "", LocalTime$
PRINT : PRINT "Enter TO timezone: "; : INPUT "", TTz%

IF FTz% <= -12 THEN FTz% = 12                    'As stated, -12 doesn't exist.
IF FTz% > 12 THEN FTz% = -11                     'Not sure if this is correct, but it
IF TTz% <= -12 THEN TTz% = 12                    'seems logical.
IF TTz% > 12 THEN TTz% = -11

'Adjust LocalTime$ from FTz% to TTz%
'------------------------------------
DateAdjust = 0                          'Standard. If not changed not adjust.

HourLocalTime% = VAL(LEFT$(LocalTime$, 2)) 'Get the hours of LocalTime$

'PRINT "Hour(s): "; HourLocalTime%

Tz2Pass% = -FTz% + TTz%                 'Calculate the timezones of passing

'PRINT "Timezone(s): "; Tz2Pass%

HourGMTTime% = HourLocalTime% - FTz%    'Bring HourLocalTime% to HourGMTTime%

IF HourGMTTime% < 0 THEN                'If HourGMTTime% < 0 then
  HourGMTTime% = 24 - HourGMTTime%         'HourGMTTime% = 24 + HourGMTTime%
ELSEIF HourGMTTime% > 24 THEN           'Elseif HourGMTTime% > 24 then
  HourGMTTime% = HourGMTTime% - 24         'HourGMTTime = HourGMTTime + 24
END IF

'PRINT "GMT: "; HourGMTTime%            'We have GMT time...

Temp2Time% = HourGMTTime% + TTz%        'Bringing HourGMTTime to 2Time%

IF Temp2Time% < 0 THEN                  'If Temp2Time% < 0 then
  Temp2Time% = 24 + Temp2Time%             'Temp2Time% = 24 - Temp2Time%
ELSE                                    'Else
  Temp2Time% = Temp2Time% + 24             'Temp2Time% = Temp2Time% + 24
END IF

'PRINT "2Time%: "; Temp2Time%

TTime$ = LTRIM$(RTRIM$(STR$(Temp2Time%)))
IF LEN(TTime$) < 2 THEN
  TTime$ = "0" + TTime$
END IF
TTime$ = TTime$ + RIGHT$(LocalTime$, 3)

'Date adjust routine
'-------------------
'BTW: don't change the above DateAdjust = 0... if you do... trouble...
DateAdjustTempTime% = HourLocalTime% + Tz2Pass%

IF DateAdjustTempTime% < 0 THEN
  DateAdjust = -1
ELSEIF DateAdjustTempTime% > 23 THEN
  DateAdjust = 1
END IF

PRINT

LOCATE , 1: PRINT "TIMEZONES:";
LOCATE , 20: PRINT "COUNTRY/CITY:";
LOCATE , 46: PRINT "LOCAL TIME:";
LOCATE , 60: PRINT "APROX. DATE ADJUST:"
PRINT STRING$(80, "-")
LOCATE , 1: PRINT "FROM: ";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%))));
LOCATE , 20: PRINT CC$(FTz%);
LOCATE , 46: PRINT LocalTime$
LOCATE , 1: PRINT "TO:";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(TTz%))));
LOCATE , 20: PRINT CC$(TTz%);
LOCATE , 46: PRINT LTRIM$(RTRIM$(TTime$));
IF LTRIM$(RTRIM$(STR$(DateAdjust))) = "1" THEN
  LOCATE , 60: PRINT "+1"
ELSE
  LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
END IF

FUNCTION CC$ (Value AS INTEGER)
IF Value = 12 THEN CC$ = "New Zealand"
IF Value = 11 THEN CC$ = "Solomon Islands"
IF Value = 10 THEN CC$ = "Sydney"
IF Value = 9 THEN CC$ = "Tokyo"
IF Value = 8 THEN CC$ = "Hong Kong, and China"
IF Value = 7 THEN CC$ = "Bangkok"
IF Value = 6 THEN CC$ = "Omsk, Russia"
IF Value = 5 THEN CC$ = "Karachi"
IF Value = 4 THEN CC$ = "Stalingrad"
IF Value = 3 THEN CC$ = "Moscow"
IF Value = 2 THEN CC$ = "Cairo"
IF Value = 1 THEN CC$ = "Berlin"
IF Value = 0 THEN CC$ = "London"
IF Value = -1 THEN CC$ = "Reykjavik"
IF Value = -2 THEN CC$ = "Greenland"
IF Value = -3 THEN CC$ = "Rio de Janeiro, Brazil"
IF Value = -4 THEN CC$ = "Santiago de Chile"
IF Value = -5 THEN CC$ = "New York"
IF Value = -6 THEN CC$ = "Chicago"
IF Value = -7 THEN CC$ = "Denver"
IF Value = -8 THEN CC$ = "Seattle"
IF Value = -9 THEN CC$ = "Alaska"
IF Value = -10 THEN CC$ = "Honolulu"
IF Value = -11 THEN CC$ = "Midway Island"
END FUNCTION

FUNCTION GA$ (Value AS STRING)
IF VAL(Value) > 0 THEN
  GA$ = "+" + Value
ELSEIF Value = "0" THEN
  GA$ = " " + Value
ELSE
  GA$ = Value
END IF
END FUNCTION

FUNCTION Milit$ (Value AS STRING)
IF LEN(Value) < 5 THEN
  Milit$ = "0" + Value
END IF
END FUNCTION
I think this is version 7... The problem you had... should be corrected...
FROM: GMT -5
time at FROM: 01:00
TO....: GMT -7

Result said it was 25:00 at GMT-7 ....(It should be 23:00)
with a date adjustment of -1 which is correct.
I checked it... and you were right... It now should show:
FROM: GMT -5
time at FROM: 01:00
TO....: GMT -7
time at TO: 23:00
Date adjust = -1
According to my test that is... let me know if you find anymore bugs...

grtz

Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
Seb McClouth

Post by Seb McClouth »

So... you're doing the same challenge on www.qbasicnews.com... How's it going there??

grtz
Seb
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Seb McClouth wrote:So... you're doing the same challenge on www.qbasicnews.com... How's it going there??

grtz
Seb
At QBN we have a brilliant 100% solution posted by DrV.

We have another solution which gives the correct time at the TO timezone, but still has problems with the "date adjustment".

Another guy modified the specs and invented his own thing. However, the TO timezone time calculation seems to work.
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

hows mine working now??

grtz
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

SebMcClouth wrote:hows mine working now??

grtz
Seb,

You still have some problem. The first one I tried didn't work.
FROM GMT-5 with time = 14:00
TO.... GMT+9

Result time at TO says 52:00 which is invalid.

Other tests also produced invalid times greater than 23:59.

Do some additional testing before you submit. Sorry.
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

This is one of the reasons why it is good to have an old laptop as programpc: you can read here and program on the other...

The problem as you state... must be sumfin wrong in my math...

I did several re-runs and found out that where there had to be - there was a +.

Timezone calculator updates:
  • nr 1:

    Code: Select all

    IF HourGMTTime% < 0 THEN
      HourGMTTime% = 24 + HourGMTTime%
    ELSEIF HourGMTTime% > 23 THEN
      HourGMTTime% = HourGMTTime% - 24
    END IF
    nr2:

    Code: Select all

    IF Temp2Time% < 0 THEN
      Temp2Time% = 24 + Temp2Time%
    ELSEIF Temp2Time% > 23 THEN
      Temp2Time% = Temp2Time% - 24
    END IF
grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

Just to be nice... version 8 of UTC.bas (as I have named it):

Code: Select all

'(C) 2005, by Sebastian McClouth
DECLARE FUNCTION GA$ (Value AS STRING)
DECLARE FUNCTION Milit$ (Value AS STRING)
DECLARE FUNCTION CC$ (Value AS INTEGER)
CLS
LOCATE , 20: PRINT "Universal TimeZone Calculator"
LOCATE , 20: PRINT "-----------------------------"
LOCATE , 32: PRINT "TIMEZONES:"
LOCATE , 30: PRINT "GMT  0: LONDON"
LOCATE , 1: PRINT "GMT -1: REYKJAVIK"; : LOCATE , 48: PRINT "GMT +1: BERLIN"
LOCATE , 1: PRINT "GMT -2: GREENLAND"; : LOCATE , 48: PRINT "GMT +2: CAIRO"
LOCATE , 1: PRINT "GMT -3: RIO DE JANEIRO, BRAZIL"; : LOCATE , 48: PRINT "GMT +3: MOSCOW"
LOCATE , 1: PRINT "GMT -4: SANTIAGO DE CHILE"; : LOCATE , 48: PRINT "GMT +4: STALINGRAD"
LOCATE , 1: PRINT "GMT -5: NEW YORK"; : LOCATE , 48: PRINT "GMT +5: KARACHI"
LOCATE , 1: PRINT "GMT -6: CHICAGO"; : LOCATE , 48: PRINT "GMT +6: OMSK, RUSSIA"
LOCATE , 1: PRINT "GMT -7: DENVER"; : LOCATE , 48: PRINT "GMT +7: BANGKOK"
LOCATE , 1: PRINT "GMT -8: SEATTLE"; : LOCATE , 48: PRINT "GMT +8: HONG KONG, AND CHINA"
LOCATE , 1: PRINT "GMT -9: ALASKA"; : LOCATE , 48: PRINT "GMT +9: TOKYO"
LOCATE , 1: PRINT "GMT-10: HONOLULU"; : LOCATE , 48: PRINT "GMT+10: SYDNEY"
LOCATE , 1: PRINT "GMT-11: MIDWAY ISLANDS"; : LOCATE , 48: PRINT "GMT+11: SOLOMON ISLANDS"
LOCATE , 48: PRINT "GMT+12: NEW ZEALAND"
PRINT
PRINT STRING$(80, "-")
PRINT "If giving e.g. GMT+1, etc, give as input 1, etc."
PRINT
PRINT "Enter FROM timezone: "; : INPUT "", FTz%
PRINT "Enter GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))) + " respective time as e.g. 14:00: "; : INPUT "", LocalTime$
PRINT : PRINT "Enter TO timezone: "; : INPUT "", TTz%

IF FTz% <= -12 THEN FTz% = 12                    'As stated, -12 doesn't exist.
IF FTz% > 12 THEN FTz% = -11                     'Not sure if this is correct, but it
IF TTz% <= -12 THEN TTz% = 12                    'seems logical.
IF TTz% > 12 THEN TTz% = -11

'Adjust LocalTime$ from FTz% to TTz%
'------------------------------------
DateAdjust = 0                          'Standard. If not changed not adjust.

HourLocalTime% = VAL(LEFT$(LocalTime$, 2)) 'Get the hours of LocalTime$

'PRINT "Hour(s): "; HourLocalTime%

Tz2Pass% = -FTz% + TTz%                 'Calculate the timezones of passing

'PRINT "Timezone(s): "; Tz2Pass%

HourGMTTime% = HourLocalTime% - FTz%    'Bring HourLocalTime% to HourGMTTime%

IF HourGMTTime% < 0 THEN                'If HourGMTTime% < 0 then
  HourGMTTime% = 24 + HourGMTTime%         'HourGMTTime% = 24 + HourGMTTime%
ELSEIF HourGMTTime% > 23 THEN           'Elseif HourGMTTime% > 24 then
  HourGMTTime% = HourGMTTime% - 24         'HourGMTTime = HourGMTTime + 24
END IF

'PRINT "GMT: "; HourGMTTime%            'We have GMT time...

Temp2Time% = HourGMTTime% + TTz%        'Bringing HourGMTTime to 2Time%

'PRINT "Temp2Time%: "; Temp2Time%

IF Temp2Time% < 0 THEN                  'If Temp2Time% < 0 then
  Temp2Time% = 24 + Temp2Time%             'Temp2Time% = 24 - Temp2Time%
ELSEIF Temp2Time% > 23 THEN             'Elseif Temp2Time% > 23 then
  Temp2Time% = Temp2Time% - 24             'Temp2Time% = Temp2Time% - 24
END IF

'PRINT "2Time%: "; Temp2Time%

TTime$ = LTRIM$(RTRIM$(STR$(Temp2Time%)))
IF LEN(TTime$) < 2 THEN
  TTime$ = "0" + TTime$
END IF
TTime$ = TTime$ + RIGHT$(LocalTime$, 3)

'Date adjust routine
'-------------------
'BTW: don't change the above DateAdjust = 0... if you do... trouble...
DateAdjustTempTime% = HourLocalTime% + Tz2Pass%

IF DateAdjustTempTime% < 0 THEN
  DateAdjust = -1
ELSEIF DateAdjustTempTime% > 23 THEN
  DateAdjust = 1
END IF

PRINT

LOCATE , 1: PRINT "TIMEZONES:";
LOCATE , 20: PRINT "COUNTRY/CITY:";
LOCATE , 46: PRINT "LOCAL TIME:";
LOCATE , 60: PRINT "APROX. DATE ADJUST:"
PRINT STRING$(80, "-")
LOCATE , 1: PRINT "FROM: ";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%))));
LOCATE , 20: PRINT CC$(FTz%);
LOCATE , 46: PRINT LocalTime$
LOCATE , 1: PRINT "TO:";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(TTz%))));
LOCATE , 20: PRINT CC$(TTz%);
LOCATE , 46: PRINT LTRIM$(RTRIM$(TTime$));
IF LTRIM$(RTRIM$(STR$(DateAdjust))) = "1" THEN
  LOCATE , 60: PRINT "+1"
ELSE
  LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
END IF

FUNCTION CC$ (Value AS INTEGER)
IF Value = 12 THEN CC$ = "New Zealand"
IF Value = 11 THEN CC$ = "Solomon Islands"
IF Value = 10 THEN CC$ = "Sydney"
IF Value = 9 THEN CC$ = "Tokyo"
IF Value = 8 THEN CC$ = "Hong Kong, and China"
IF Value = 7 THEN CC$ = "Bangkok"
IF Value = 6 THEN CC$ = "Omsk, Russia"
IF Value = 5 THEN CC$ = "Karachi"
IF Value = 4 THEN CC$ = "Stalingrad"
IF Value = 3 THEN CC$ = "Moscow"
IF Value = 2 THEN CC$ = "Cairo"
IF Value = 1 THEN CC$ = "Berlin"
IF Value = 0 THEN CC$ = "London"
IF Value = -1 THEN CC$ = "Reykjavik"
IF Value = -2 THEN CC$ = "Greenland"
IF Value = -3 THEN CC$ = "Rio de Janeiro, Brazil"
IF Value = -4 THEN CC$ = "Santiago de Chile"
IF Value = -5 THEN CC$ = "New York"
IF Value = -6 THEN CC$ = "Chicago"
IF Value = -7 THEN CC$ = "Denver"
IF Value = -8 THEN CC$ = "Seattle"
IF Value = -9 THEN CC$ = "Alaska"
IF Value = -10 THEN CC$ = "Honolulu"
IF Value = -11 THEN CC$ = "Midway Island"
END FUNCTION

FUNCTION GA$ (Value AS STRING)
IF VAL(Value) > 0 THEN
  GA$ = "+" + Value
ELSEIF Value = "0" THEN
  GA$ = " " + Value
ELSE
  GA$ = Value
END IF
END FUNCTION

FUNCTION Milit$ (Value AS STRING)
IF LEN(Value) < 5 THEN
  Milit$ = "0" + Value
END IF
END FUNCTION
grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Wonderful, Seb, you finally have a solid working version. Everything I tried works great!

You should be commended for sticking to it and never giving up until you got it working.

One minor criticism: You never added the validation of the input timezone and time, like you said you would. You should do this on future programs so they don't produce erroneous output.

You are the WINNER of this challenge. Congratulations! :D
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Friends,

Here's my own version of the timezone program which I had working since 21-Jul-2005. There are lines here and there that are not "structured code", but that's what I was thinking at the time. All input is completely validated as you can notice.

Some of the city names may need updating. I got the list from a 1960 version of the World Book Encyclopedia.

Any comments will be well received and appreciated.
*****

Code: Select all

defint a-z
DECLARE FUNCTION   NumStrict    (Z$)

dim tz (1 to 24)
dim tn$(1 to 24)
tz(1)=0   :tn$(1)="London"
tz(2)=-1  :tn$(2)="Reykjavik"
tz(3)=-2  :tn$(3)="Greenland"
tz(4)=-3  :tn$(4)="Rio de Janeiro"
tz(5)=-4  :tn$(5)="Santiago de Chile"
tz(6)=-5  :tn$(6)="New York"
tz(7)=-6  :tn$(7)="Chicago"
tz(8)=-7  :tn$(8)="Denver"
tz(9)=-8  :tn$(9)="Seattle"
tz(10)=-9  :tn$(10)="Alaska"
tz(11)=-10 :tn$(11)="Honolulu"
tz(12)=-11 :tn$(12)="Midway Is."
tz(13)=+12 :tn$(13)="New Zealand"
tz(14)=+11 :tn$(14)="Solomon Is."
tz(15)=+10 :tn$(15)="Sydney"
tz(16)=+9  :tn$(16)="Tokyo"
tz(17)=+8  :tn$(17)="China"
tz(18)=+7  :tn$(18)="Bangkok"
tz(19)=+6  :tn$(19)="Omsk"
tz(20)=+5  :tn$(20)="Karachi"
tz(21)=+4  :tn$(21)="Stalingrad"
tz(22)=+3  :tn$(22)="Moscow"
tz(23)=+2  :tn$(23)="Cairo"
tz(24)=+1  :tn$(24)="Berlin"

getfrom:
Print "Enter FROM timezone as GMT0, GMT+nn, or GMT-nn ";
gosub getgmt
if gmterr=1 then print "Invalid timezone":goto getfrom
fromzone=gmtzone
fromname$=zonename$
fromgmt$=gmt$

gettime:
Print "Enter military time (hh:mm) for FROM timezone ";
input ztime$
ztime$=ltrim$(rtrim$(ztime$))
if mid$(ztime$,3,1)<>":" or len(ztime$)<>5 then print "Invalid time":goto gettime
z$=left$(ztime$,2)+right$(ztime$,2)
if not NumStrict(z$) then print "Invalid time":goto gettime
hh=val(left$(z$,2))
mm$=right$(z$,2)
if hh>23 or mm>59 then print "Invalid time":goto gettime

getto:
Print "Enter TO timezone as GMT0, GMT+nn, or GMT-nn ";
gosub getgmt
if gmterr=1 then print "Invalid timezone":goto getto
tozone=gmtzone
toname$=zonename$
togmt$=gmt$
if tozone=fromzone then print "FROM and TO timezones must be different":goto getto

rem ***** MAIN PROCESS *****

if fromzone<0 then fromsign$="-" else fromsign$="+"
if   tozone<0 then tosign$  ="-" else   tosign$="+"
from.to.sign$=fromsign$+tosign$

afrom = abs(fromzone)
ato   = abs(tozone)
days$="0"

SELECT CASE from.to.sign$
  CASE "-+" 
       difhours=afrom+ato
  CASE "--"
       if afrom<ato then  
          difhours= -(ato-afrom)
       else
          rem from is greater.
          difhours=afrom-ato
       end if
  CASE "++" 
       if afrom<ato then 
          difhours= ato-afrom
       else
          difhours= -(afrom-ato)
       end if
  CASE "+-"   
       rem difhours=ato+afrom
       difhours=-(afrom+ato)
  CASE ELSE
       print "SYSERR: invalid +- variable":system
END SELECT

tohh=hh+difhours
if tohh<0 then  tohh=tohh+24 : days$="-1" : goto gothh
if tohh>23 then tohh=tohh-24 : days$="+1" 
gothh:

print
rem print "FROM zone is GMT";fromzone;"  ";fromname$
rem print "TO   zone is GMT";  tozone;"  ";toname$
print "FROM zone is ";fromgmt$;"  ";fromname$
print "TO   zone is ";  togmt$;"  ";toname$
if difhours<0 then signh$="-" else signh$="+"
print "Time at FROM zone is ";right$("00"+ltrim$(str$(hh)),2);":";mm$
print "dif in hours is ";signh$;ltrim$(str$(abs(difhours)))
print "Time at TO   zone is ";right$("00"+ltrim$(str$(tohh)),2);":";mm$
print "Date adjustment for TO zone is ";days$

system

getgmt:
  gmterr=0  'assume no error
  input gmt$
  gmt$=ucase$(ltrim$(rtrim$(gmt$)))
  lgmt=len(gmt$)
  if left$(gmt$,3)<>"GMT" or lgmt<4 or lgmt>6 then gmterr=1:return
  p4$=mid$(gmt$,4,1)
  if lgmt=4 and p4$="0" then gmtzone=0:goto findname
  if p4$<>"+" and p4$<>"-" then gmterr=1:return
  if lgmt<5 then gmterr=1:return
  z$=mid$(gmt$,5)
  if not NumStrict(z$) then gmterr=1:return
  if p4$="-" then zmax=11 else zmax=12
  gmtzone=val(z$)
  if gmtzone<1 or gmtzone>zmax then gmterr=1:return
  if p4$="-" then gmtzone=-gmtzone

findname:
  found=0
  for x=1 to 24
      if tz(x)=gmtzone then found=1:exit for
  next x
  if found=0 then print "SYSERR: zone not found on table":system
  zonename$=tn$(x)

return '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

END

FUNCTION NumStrict (Z$)

REM *
REM *** (NUMSTRICT) - CHECK FOR STRICTLY NUMERIC ONLY (NO NULL NO DECIMAL)
REM *

  NumStrict=0         'Init to False

  IF Z$="" THEN EXIT FUNCTION

  FOR X = 1 TO LEN(Z$)
      A=ASC(MID$(Z$,X,1))
      IF A<48 OR A>57 THEN EXIT FUNCTION
  NEXT X

  NumStrict = -1          'True

END FUNCTION
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

One minor criticism: You never added the validation of the input timezone and time, like you said you would. You should do this on future programs so they don't produce erroneous output.
Isn't this some sort of validation?

Code: Select all

IF FTz% <= -12 THEN FTz% = 12                    'As stated, -12 doesn't exist. 
IF FTz% > 12 THEN FTz% = -11                     'Not sure if this is correct, but it 
IF TTz% <= -12 THEN TTz% = 12                    'seems logical. 
IF TTz% > 12 THEN TTz% = -11
I will add a hour-validation as soon as I'm gonna implent in qbinux.

YEAH!! I'm the winner!!! Feels good...

It's was fun... can't wait for the next challenge...

grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

SebMcClouth wrote:.....

Isn't this some sort of validation?

Code: Select all

IF FTz% <= -12 THEN FTz% = 12                    'As stated, -12 doesn't exist. 
IF FTz% > 12 THEN FTz% = -11                     'Not sure if this is correct, but it 
IF TTz% <= -12 THEN TTz% = 12                    'seems logical. 
IF TTz% > 12 THEN TTz% = -11
No, Seb, that's not validation. That's taking invalid input and forcing it into some default value that you decided. You never warn the user.
Example: If the user is intending to enter timezone -11 but by a keying error enters -21, you'll convert this to 12 which is way off from what he intended.
So, if any input is invalid, advise the user with a meaningful error message, and input again. This is a rule you should follow for any program.
A long time ago, a supervisor asked my why I was sequence checking the input file to my program, when the file just came out of a sort utility. My reply was that I have seen sorts fail due to operator error, and I didn't want my program to produce garbage results with an out of sequence file.
Get the point?
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

How about me adding the validation and posting the new version?

grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

Here's the adjust version:

Code: Select all

'(C) 2005, by Sebastian McClouth 
DECLARE FUNCTION GA$ (Value AS STRING) 
DECLARE FUNCTION Milit$ (Value AS STRING) 
DECLARE FUNCTION CC$ (Value AS INTEGER) 
CLS 
LOCATE , 20: PRINT "Universal TimeZone Calculator" 
LOCATE , 20: PRINT "-----------------------------" 
LOCATE , 32: PRINT "TIMEZONES:" 
LOCATE , 30: PRINT "GMT  0: LONDON" 
LOCATE , 1: PRINT "GMT -1: REYKJAVIK"; : LOCATE , 48: PRINT "GMT +1: BERLIN" 
LOCATE , 1: PRINT "GMT -2: GREENLAND"; : LOCATE , 48: PRINT "GMT +2: CAIRO" 
LOCATE , 1: PRINT "GMT -3: RIO DE JANEIRO, BRAZIL"; : LOCATE , 48: PRINT "GMT +3: MOSCOW" 
LOCATE , 1: PRINT "GMT -4: SANTIAGO DE CHILE"; : LOCATE , 48: PRINT "GMT +4: STALINGRAD" 
LOCATE , 1: PRINT "GMT -5: NEW YORK"; : LOCATE , 48: PRINT "GMT +5: KARACHI" 
LOCATE , 1: PRINT "GMT -6: CHICAGO"; : LOCATE , 48: PRINT "GMT +6: OMSK, RUSSIA" 
LOCATE , 1: PRINT "GMT -7: DENVER"; : LOCATE , 48: PRINT "GMT +7: BANGKOK" 
LOCATE , 1: PRINT "GMT -8: SEATTLE"; : LOCATE , 48: PRINT "GMT +8: HONG KONG, AND CHINA" 
LOCATE , 1: PRINT "GMT -9: ALASKA"; : LOCATE , 48: PRINT "GMT +9: TOKYO" 
LOCATE , 1: PRINT "GMT-10: HONOLULU"; : LOCATE , 48: PRINT "GMT+10: SYDNEY" 
LOCATE , 1: PRINT "GMT-11: MIDWAY ISLANDS"; : LOCATE , 48: PRINT "GMT+11: SOLOMON ISLANDS" 
LOCATE , 48: PRINT "GMT+12: NEW ZEALAND" 
PRINT 
PRINT STRING$(80, "-") 
PRINT "If giving e.g. GMT+1, etc, give as input 1, etc." 
PRINT 
1 PRINT "Enter FROM timezone: "; : INPUT "", FTz% 
IF FTz% <= -12 or FTz% > 12 THEN
  PRINT "The chosen timezone is invalid."
  GOTO 1
END IF
2 PRINT "Enter GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))) + " respective time as e.g. 14:00: "; : INPUT "", LocalTime$ 
IF LEFT$(LocalTime$, 2) < 00 OR LEFT$(LocalTime$, 2) > 23 OR RIGHT$(LocalTime$, 2) < 00 OR RIGHT$(LocalTIme$, 2) > 59 THEN 
  PRINT "The chosen time is invalid."
  GOTO 2
END IF
3 PRINT : PRINT "Enter TO timezone: "; : INPUT "", TTz%
IF TTz% <= -12 or TTz% > 12 THEN
  PRINT "The chosen timezone is invalid."
  GOTO 3
END IF 


'Adjust LocalTime$ from FTz% to TTz% 
'------------------------------------ 
DateAdjust = 0                          'Standard. If not changed not adjust. 

HourLocalTime% = VAL(LEFT$(LocalTime$, 2)) 'Get the hours of LocalTime$ 

'PRINT "Hour(s): "; HourLocalTime% 

Tz2Pass% = -FTz% + TTz%                 'Calculate the timezones of passing 

'PRINT "Timezone(s): "; Tz2Pass% 

HourGMTTime% = HourLocalTime% - FTz%    'Bring HourLocalTime% to HourGMTTime% 

IF HourGMTTime% < 0 THEN                'If HourGMTTime% < 0 then 
  HourGMTTime% = 24 + HourGMTTime%         'HourGMTTime% = 24 + HourGMTTime% 
ELSEIF HourGMTTime% > 23 THEN           'Elseif HourGMTTime% > 24 then 
  HourGMTTime% = HourGMTTime% - 24         'HourGMTTime = HourGMTTime + 24 
END IF 

'PRINT "GMT: "; HourGMTTime%            'We have GMT time... 

Temp2Time% = HourGMTTime% + TTz%        'Bringing HourGMTTime to 2Time% 

'PRINT "Temp2Time%: "; Temp2Time% 

IF Temp2Time% < 0 THEN                  'If Temp2Time% < 0 then 
  Temp2Time% = 24 + Temp2Time%             'Temp2Time% = 24 - Temp2Time% 
ELSEIF Temp2Time% > 23 THEN             'Elseif Temp2Time% > 23 then 
  Temp2Time% = Temp2Time% - 24             'Temp2Time% = Temp2Time% - 24 
END IF 

'PRINT "2Time%: "; Temp2Time% 

TTime$ = LTRIM$(RTRIM$(STR$(Temp2Time%))) 
IF LEN(TTime$) < 2 THEN 
  TTime$ = "0" + TTime$ 
END IF 
TTime$ = TTime$ + RIGHT$(LocalTime$, 3) 

'Date adjust routine 
'------------------- 
'BTW: don't change the above DateAdjust = 0... if you do... trouble... 
DateAdjustTempTime% = HourLocalTime% + Tz2Pass% 

IF DateAdjustTempTime% < 0 THEN 
  DateAdjust = -1 
ELSEIF DateAdjustTempTime% > 23 THEN 
  DateAdjust = 1 
END IF 

PRINT 

LOCATE , 1: PRINT "TIMEZONES:"; 
LOCATE , 20: PRINT "COUNTRY/CITY:"; 
LOCATE , 46: PRINT "LOCAL TIME:"; 
LOCATE , 60: PRINT "APROX. DATE ADJUST:" 
PRINT STRING$(80, "-") 
LOCATE , 1: PRINT "FROM: "; 
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%)))); 
LOCATE , 20: PRINT CC$(FTz%); 
LOCATE , 46: PRINT LocalTime$ 
LOCATE , 1: PRINT "TO:"; 
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(TTz%)))); 
LOCATE , 20: PRINT CC$(TTz%); 
LOCATE , 46: PRINT LTRIM$(RTRIM$(TTime$)); 
IF LTRIM$(RTRIM$(STR$(DateAdjust))) = "1" THEN 
  LOCATE , 60: PRINT "+1" 
ELSE 
  LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust))) 
END IF 

FUNCTION CC$ (Value AS INTEGER) 
IF Value = 12 THEN CC$ = "New Zealand" 
IF Value = 11 THEN CC$ = "Solomon Islands" 
IF Value = 10 THEN CC$ = "Sydney" 
IF Value = 9 THEN CC$ = "Tokyo" 
IF Value = 8 THEN CC$ = "Hong Kong, and China" 
IF Value = 7 THEN CC$ = "Bangkok" 
IF Value = 6 THEN CC$ = "Omsk, Russia" 
IF Value = 5 THEN CC$ = "Karachi" 
IF Value = 4 THEN CC$ = "Stalingrad" 
IF Value = 3 THEN CC$ = "Moscow" 
IF Value = 2 THEN CC$ = "Cairo" 
IF Value = 1 THEN CC$ = "Berlin" 
IF Value = 0 THEN CC$ = "London" 
IF Value = -1 THEN CC$ = "Reykjavik" 
IF Value = -2 THEN CC$ = "Greenland" 
IF Value = -3 THEN CC$ = "Rio de Janeiro, Brazil" 
IF Value = -4 THEN CC$ = "Santiago de Chile" 
IF Value = -5 THEN CC$ = "New York" 
IF Value = -6 THEN CC$ = "Chicago" 
IF Value = -7 THEN CC$ = "Denver" 
IF Value = -8 THEN CC$ = "Seattle" 
IF Value = -9 THEN CC$ = "Alaska" 
IF Value = -10 THEN CC$ = "Honolulu" 
IF Value = -11 THEN CC$ = "Midway Island" 
END FUNCTION 

FUNCTION GA$ (Value AS STRING) 
IF VAL(Value) > 0 THEN 
  GA$ = "+" + Value 
ELSEIF Value = "0" THEN 
  GA$ = " " + Value 
ELSE 
  GA$ = Value 
END IF 
END FUNCTION 

FUNCTION Milit$ (Value AS STRING) 
IF LEN(Value) < 5 THEN 
  Milit$ = "0" + Value 
END IF 
END FUNCTION
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Seb,

I get 4 compile errors on the following line:

IF LEFT$(LocalTime$, 2) < 00 OR LEFT$(LocalTime$, 2) > 23 OR RIGHT$(LocalTime$, 2) < 00 OR RIGHT$(LocalTIme$, 2) > 59 THEN

You're comparing strings against numerics. To be sure, I'd rather you fix it.
*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
Seb McClouth

Post by Seb McClouth »

I just wrote them quickly. But you're right, it should be:

Code: Select all

IF str$(LEFT$(LocalTime$, 2)) < 0 OR str$(LEFT$(LocalTime$, 2))> 23 OR str$(RIGHT$(LocalTime$, 2)) < 00 OR str$(RIGHT$(LocalTIme$, 2)) > 59 THEN/code]

I think I'm gonna write a STRIGHT$ and a STLEFT$ funtion... hehehehe.

grtz
Seb
moneo
Veteran
Posts: 451
Joined: Tue Jun 28, 2005 7:00 pm
Location: Mexico City, Mexico

Post by moneo »

Seb McClouth wrote:I just wrote them quickly. But you're right, it should be:

Code: Select all

IF str$(LEFT$(LocalTime$, 2)) < 0 OR str$(LEFT$(LocalTime$, 2))> 23 OR str$(RIGHT$(LocalTime$, 2)) < 00 OR str$(RIGHT$(LocalTIme$, 2)) > 59 THEN/code]

I think I'm gonna write a STRIGHT$ and a STLEFT$ funtion... hehehehe.

grtz
Seb[/quote]
Ooops. I think you meant:
IF VAL(LEFT$(LocalTime$, 2)) < 0 ..........etc.

BUT, even that is not a good numeric check. If the user enters 1X:2Y by mistake, then this logic will not catch the alpha characters and your program will process the above invalid hours of 1X as just hours of 1. The invalid minutes of 2Y will be carried to the final HH:MM displayed.
What this means is that first you must check the HH and MM for numeric. Then you can check if < 0, > 23, etc.

In addition, you should make sure that the user entered the correct HH:MM format for the time. Before the above code, you should do something like this:
IF LEN(LocalTime$)<>5 or MID$(LocalTime$,3,1)<>":" then ..... error

*****
If you are ahead of me, lead.
If you are behind me, follow.
If you are not doing anything,
Get out of the way.
User avatar
SebMcClouth
Veteran
Posts: 240
Joined: Fri Apr 29, 2005 2:20 am
Location: Inside the Matrix

Post by SebMcClouth »

Okay, so once again, back to the drawing table!

grtz
Seb
I know why you're here. I know what you've been doing... why you hardly sleep, why you live alone, and why night after night, you sit by your computer...<br>
Unfortunately, no one can be told what Qbinux is. You have to see it for yourself.
Post Reply