Page 1 of 3
CHALLENGE: Timezone calculator.
Posted: Sun Jul 17, 2005 6:47 pm
by moneo
My son is in Japan this week participating in a Robocup (robots that play soccer) competition. Anyway, we in the family have a tough time figuring out what date and time it is over there. This made me think of a timezone calculator program.
Note: This challenge recently appeared on other QB forums, but the specifications below have been significantly revised and enhanced.
Here are the requirements of the program:
- Program written in QB or Quickbasic.
- For input and output time, please use military time, example 00:45 instead of 12:45 am, and 17:30 instead of 5:30 pm.
- Input timezones will be expressed as GMT +nn or GMT -nn or GMT itself. (See table of timezones below.)
- Input #1: the FROM timezone, and respective time.
- Input #2: the TO timezone.
- Perform adequate input validation.
- Output #1: Print the FROM timezone, the country/city name from timezones table, and the given time at the FROM timezone.
- Output #2: Print the TO timezone, the country/city name from timezones table, the calculated time in the TO timezone based on the given time at the FROM timezone, and an indication as to whether the date in the TO timezone needs adjustment by -1, 0, or +1 days.
Considerations:
- The program will only handle the 24 standard timezones as shown in the table below.
- Due to the complexity, Daylight Savings Time or Summer Time will not be addressed by the program. An adjustment to the computed time can be performed by the user of the program, as required.
Please submit a complete working program, not just a function. I'll check every entry and provide feedback.
TABLE OF TIMEZONES:
GMT = London
GMT - 1 = Reykjavik
GMT - 2 = Greenland
GMT - 3 = Rio de Janeiro, Brazil
GMT - 4 = Santiago de Chile
GMT - 5 = New York
GMT - 6 = Chicago
GMT - 7 = Denver
GMT - 8 = Seattle
GMT - 9 = Alaska
GMT -10 = Honolulu
GMT -11 = Midway Island
GMT -12 (does not exist, see GMT +12)
continuing in a circle around the world............
GMT +12 = New Zealand
GMT +11 = Solomon Islands
GMT +10 = Sydney
GMT + 9 = Tokyo
GMT + 8 = Hong Kong, and China
GMT + 7 = Bangkok
GMT + 6 = Omsk, Russia
GMT + 5 = Karachi
GMT + 4 = Stalingrad
GMT + 3 = Moscow
GMT + 2 = Cairo
GMT + 1 = Berlin
*****
Posted: Mon Jul 18, 2005 7:22 am
by SebMcClouth
If someone has build this... may I then use in my program? qbinux?
grtz
Seb
Posted: Mon Jul 25, 2005 6:31 pm
by moneo
Hey guys, is anybody working on a solution to this timezone problem?
If anybody has something in the works, please say so, because I'm ready to post my own version. I don't want to steal your thunder.
Seb, if you'd like my version in the meantime, send me your email address by PM.
*****
Posted: Tue Jul 26, 2005 12:33 am
by Seb McClouth
Actually, yes I am... that way I can use in it in qbinux...
I'm gonna post it in a few.
grtz
Seb
Posted: Tue Jul 26, 2005 12:49 am
by SebMcClouth
? ?? Q??$ ??Sj ? ] ? V ? ? ? ? ? ? 2 { ? ? PR FTz? LocalTimeu NMALLOC? TT? TTz
NLocalTime NTTime
ELSENTTime TTime TTDateAdjustA ToTime CC Value z Milit< GA TRIM NTTAdjust TTAdjust FT$ DateAdjustT
DateAdjust FTTime F NDateAdjust
; H IF NLocalTime% + FTz% < 0 OR NLocalTime% + FTz% > 24 THE ?
? ! (C) 2005, by Sebastian McClouthS D ? ? ? D ? ? ? D ? ? ? s? rse ? m Universal TimeZone Calculator"? rse ? m -----------------------------"? rse ? m
TIMEZONES:? rse ? m GMT 0: LONDON? rsd? m GMT -1: REYKJAVIK"? ? rse0 ? m GMT +1: BERLIN? rsd? m GMT -2: GREENLAND"? ? rse0 ? m
GMT +2: CAIRO"? rsd? m GMT -3: RIO DE JANEIRO, BRAZIL? ? rse0 ? m GMT +3: MOSCOW? rsd? m GMT -4: SANTIAGO DE CHILE"? ? rse0 ? m GMT +4: STALINGRAD? rsd? m GMT -5: NEW YORK? ? rse0 ? m GMT +5: KARACHI"? rsd? m GMT -6: CHICAGO"? ? rse0 ? m GMT +6: OMSK, RUSSIA? rsd? m GMT -7: DENVER? ? rse0 ? m GMT +7: BANGKOK"? rsd? m GMT -8: SEATTLE"? ? rse0 ? m GMT +8: HONG KONG, AND CHINA? rsd? m GMT -9: ALASKA? ? rse0 ? m
GMT +9: TOKYO"? rsd? m GMT-10: HONOLULU? ? rse0 ? m GMT+10: SYDNEY? rsd? m GMT-11: MIDWAY ISLANDS? ? rse0 ? m GMT+11: SOLOMON ISLANDS"? rse0 ? m GMT+12: NEW ZEALAND"? ? eP m -"S? m0 If giving e.g. GMT+1, etc, give as input 1, etc.? ? m Enter FROM timezone: "? ? m ? V ? ? m Enter GMT"V QE+ ? m respective time as e.g. 14:00: ? ? m ? ] ? ? ? m Enter TO timezone: "? ? m ? { ? ? { e x] e { ? 0 As stated, -12 doesn't exist.l ? % Adjust LocalTime$ from FTz% to TTz% ?
$- ? ( First we bring LocalTime$ back to GMT: ] d ,Z? ? PRINT NLocalTime%% ? V wdc? V we _ua 8 ? V wdca e ? V wnw? dx A ? V we _M 2 ? V wne w? d A P I N ? V wn? d A P ? ; Okay, we moved FTz% to GMT, now we gonna move GMT to TTz% ? { dc? { e _ua ? { dca ? e ? { nw? dx A ? { e _M ? { ne w? d A P I > ? { n? d $ P ? QE+m :" ] d B ? ? E The DateAdjuster was bugged... can someone help me out on this one? ? rsd? m
TIMEZONES:? ? rse ? m
COUNTRY/CITY:"? ? rse$ ? m LOCAL TIME:"? ? rse2 ? m APROX. DATE ADJUST:"? eF m -"S? rsd? m FROM: ? ? rsd!? m GMT"V QE+ ? ? ? rse ? V ? ? ? rse$ ? ] ? rsd? m TO:"? ? rsd!? m GMT"{ QE+ ? ? ? rse ? { ? ? ? rse$ ? ? ? ? rse2 ? $QE+? ????????V W CC06 X ? ? ? ? e ] 6 m New Zealand"? ? e ] ^ m Solomon Islands"? ? d)] z m Sydney? ? d%] ? m Tokyo"? ? d!] ? m Hong Kong, and China? ? d] ? m Bangkok"? ? d] m Omsk, Russia? ? d] m Karachi"? ? d] >m
Stalingrad? ? d
] Zm Moscow? ? d ] vm Cairo"? ? d] ?m Berlin? ? d] ?m London? ? dx] ?m Reykjavik"? ? d x] ?m Greenland"? ? d
x] m Rio de Janeiro, Brazil? ? dx] Jm Santiago de Chile"? ? dx] jm New York? ? dx] ?m Chicago"? ? dx] ?m Denver? ? d!x] ?m Seattle"? ? d%x] ?m Alaska? ? d)x] m Honolulu? ? e x] .m
Midway Island"? Q ???????? Milit0B X ? ? ? ? -?dca : m 0" ? ? P Q ???????? GA0t X ? ? ? ? Zd_a : m +" ? ? ? m 0"M b m " ? ? I p ? ? P Q ????????
Posted: Tue Jul 26, 2005 4:40 am
by Seb McClouth
Great... not... thought I had posted a txt-file... well I'll post it again 2night...
grtz
Seb
Posted: Tue Jul 26, 2005 3:27 pm
by SebMcClouth
Hope this helps a bit... there was only a slight problem... the date adjusting...
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 TTz% = -12 THEN TTz% = 12 'As stated, -12 doesn't exist.
'Adjust LocalTime$ from FTz% to TTz%
'------------------------------------
'First we bring LocalTime$ back to GMT:
NLocalTime% = VAL(LEFT$(LocalTime$, 2))
'PRINT NLocalTime%
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 DateAdjuster was bugged... can someone help me out on this one?
PRINT
LOCATE , 1: PRINT "TIMEZONES:";
LOCATE , 20: PRINT "COUNTRY/CITY:";
LOCATE , 36: PRINT "LOCAL TIME:";
LOCATE , 50: PRINT "APROX. DATE ADJUST:"
PRINT STRING$(70, "-")
LOCATE , 1: PRINT "FROM: ";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(FTz%))));
LOCATE , 20: PRINT CC$(FTz%);
LOCATE , 36: PRINT LocalTime$
LOCATE , 1: PRINT "TO:";
LOCATE , 8: PRINT "GMT" + GA$(LTRIM$(RTRIM$(STR$(TTz%))));
LOCATE , 20: PRINT CC$(TTz%);
LOCATE , 36: PRINT ToTime$;
LOCATE , 50: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
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
Posted: Tue Jul 26, 2005 6:07 pm
by moneo
SebMcClouth wrote:Hope this helps a bit... there was only a slight problem... the date adjusting...
Right, the date adjustment is not working yet, it seems to always say 0.
Anyway, I like you program very much. I like the table of timezones displayed for the user, and I like the neatly formatted output.
It compiled on the first try and ran on the first test. Excellent!
The time of the TO timezone for all the cases that I tested was computed correctly. This is what the program is all about. Great!
I'm not finished testing yet, but so far I noticed the following minor anomalies:
1) the date adjustment as we already mentioned.
2) You didn't validate the input timezones. That's your choice, but it can produce some strange output.
3) You didn't validate the input time (hh:mm). Ditto.
4) When displaying the computed time at the TO timezone, if the time is less than 10:00, it's missing a leading zero, like 9:00 should be 09:00. Without the zero, it could be interpreted as 9:00 pm.
5) On the final output, when the country/city name is too long, like Rio de Janeiro, Brazil, it corrupts the next field (Local Time) with underlay from the excess characters.
*****
Posted: Wed Jul 27, 2005 3:03 am
by SebMcClouth
I'll work on it some more later today. I'll probably have a working version 2night, which I'll post then.
Till then.
grtz
Seb
Posted: Wed Jul 27, 2005 11:36 pm
by SebMcClouth
Bit later but I actually rewrote the whole math part...
Now it doesn't calculate back to GMT anymore but straight to the desired Timezone, and because of this I was able to rewrite the dateadjust code...
Here goes:
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 TTz% = -12 THEN TTz% = 12 'As stated, -12 doesn't exist.
'Adjust LocalTime$ from FTz% to TTz%
'------------------------------------
DateAdjust = 0 'Standard. If not changed not adjust.
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
PRINT N2Time%;
IF N2Time% < 0 THEN 'If N2Time% goes below zero
NTime% = 24 + N2Time% 'NewTime% = 24 + (-value%)
DateAdjust = -1 'Date needs adjustment
ELSEIF N2Time% > 23 THEN 'If N2Time% goes over 24
NTime% = (23 - N2Time%) 'NewTime% = 0 + (24 - (-value%)
IF NTime% < 0 THEN 'if NewTime% goes under zero
NTime% = -NTime% 'Make it positive
END IF 'Else nothing
DateAdjust = 1 'Date needs adjustment
END IF
'NTime%=NTime% + TzToPass% 'Just here as a code reminder for
'myselfs...
IF LEN(STR$(NTime%)) = 2 THEN 'Adjust hourstring to hourvariable
ToTime$ = "0" + LTRIM$(RTRIM$(STR$(NTime%))) + RIGHT$(LocalTime$, 3)
ELSE
ToTime$ = STR$(NTime%) + RIGHT$(LocalTime$, 3)
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$));
LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
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
Good luck!
Grtz
Seb
Posted: Wed Jul 27, 2005 11:40 pm
by SebMcClouth
moneo wrote:2) You didn't validate the input timezones. That's your choice, but it can produce some strange output.
3) You didn't validate the input time (hh:mm). Ditto.
I'm gonna work on these two. And while I'm add it, I'm gonna implent in my core code.
grtz
Seb
Posted: Thu Jul 28, 2005 1:14 pm
by moneo
Seb,
When you were fixing it, you must have broken something, 'cause it's not working properly.
Your first version worked fine for calculating the time at the TO timezone. Now, with your new (simplified) logic, there's problems. Do some additional testing.
Keep at it --- you're so close.
*****
Posted: Fri Jul 29, 2005 4:36 am
by SebMcClouth
moneo wrote:
Your first version worked fine for calculating the time at the TO timezone. Now, with your new (simplified) logic, there's problems. Do some additional testing.
I've testing it several times... it seemed to work...
Reason why I used the simplified is because I had trouble calculating the date adjuster... mh... it give me an idea... I could add some version2 code to version1... you'll see it later on...
mhh... I've done it before...
grtz
BTW this is no code from a book, just from my head and a little help from my gf who happend to be great at mathematics...
Posted: Fri Jul 29, 2005 8:21 am
by Seb McClouth
There was a slight error in my math, here's the fix:
Code: Select all
IF N2Time% < 0 THEN 'If N2Time% goes below zero
NTime% = 23 + N2Time% 'NewTime% = 24 + (-value%)
DateAdjust = -1 'Date needs adjustment
ELSEIF N2Time% > 23 THEN 'If N2Time% goes over 24
NTime% = (23 - N2Time%) 'NewTime% = 0 + (24 - (-value%)
IF NTime% < 0 THEN 'if NewTime% goes under zero
NTime% = -NTime% 'Make it positive
END IF 'Else nothing
DateAdjust = 1 'Date needs adjustment
END IF
The error was in the formula
which should have been
If it isn't fixed now, let me know.
grtz
Seb
Posted: Fri Jul 29, 2005 8:38 am
by Seb McClouth
Later 2night I'll fix the other things. Can you test the code for me with the fix?
Btw this is my first program which I program for someone else... and I like it!!
grtz
Seb
Posted: Sat Jul 30, 2005 12:01 am
by SebMcClouth
Okay, fixed some more... You try this one... hope it works...
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.
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
PRINT N2Time%;
IF N2Time% < 0 THEN 'If N2Time% goes below zero
NTime% = 23 + N2Time% 'NewTime% = 24 + (-value%)
DateAdjust = -1 'Date needs adjustment
ELSEIF N2Time% > 23 THEN 'If N2Time% goes over 24
NTime% = (23 - N2Time%) 'NewTime% = 0 + (24 - (-value%)
IF NTime% < 0 THEN 'if NewTime% goes under zero
NTime% = -NTime% 'Make it positive
END IF 'Else nothing
DateAdjust = 1 'Date needs adjustment
END IF
'NTime%=NTime% + TzToPass% 'Just here as a code reminder for
'myselfs...
IF LEN(STR$(NTime%)) = 2 THEN 'Adjust hourstring to hourvariable
ToTime$ = "0" + LTRIM$(RTRIM$(STR$(NTime%))) + RIGHT$(LocalTime$, 3)
ELSE
ToTime$ = STR$(NTime%) + RIGHT$(LocalTime$, 3)
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$));
LOCATE , 60: PRINT LTRIM$(RTRIM$(STR$(DateAdjust)))
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
Posted: Sat Jul 30, 2005 5:18 am
by smagin
Hey! Stalingrad doesn't exist on the maps for 50 years!!! It was renamed as VOLGOGRAD after Stalin's re-funerals. (Actually he died in 1953 but was re-buried ten years later).
Posted: Sat Jul 30, 2005 6:37 am
by Seb McClouth
That's how I got it... But okay... I'll change it for ya...
grtz
Seb
Posted: Sat Jul 30, 2005 5:42 pm
by moneo
Seb,
Your latest version runs but gives the wrong answers.
Examples:
FROM: GMT-5 at 14:00
TO....: GMT+9 says 05:00 (should be 04:00)
FROM: GMT-5 at 01:00
TO....: GMT-3 says 01:00 (should be 03:00)
FROM: GMT-3 at 23:00
TO....: GMT-5 says 23:00 (should be 21:00)
I suggest going back to your original version which worked for the TO time, and then try to modify it to figure the date adjustment.
*****
Posted: Sun Jul 31, 2005 2:11 am
by Seb McClouth
Yeah.. I noticed it didn't work like it should... I'll give a new version soon...
grtz
Seb