Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Timezone calculator.
#39
Here's a version for QB (should still work in FB too); I made a few small aesthetic changes.

(I didn't feel like writing validation code, so I made sure the input was always valid. Smile )

Code:
DECLARE FUNCTION pickzone% (title AS STRING)
DECLARE FUNCTION gmtoffsettostring$ (gmtoffset AS INTEGER)
DECLARE FUNCTION picktime% (title AS STRING, h AS INTEGER, m AS INTEGER)
DECLARE FUNCTION zerostring$ (n AS INTEGER, chars AS INTEGER)
'' tzconv.bas - timezone converter
'' 29-Jul-2005 - DrV - initial version
'' 29-Jul-2005 - DrV - modified to work with QB, plus some minor visual tweaks

''option explicit

DEFINT A-Z

tzdata:
DATA "London", 0
DATA "Reykjavik", -1
DATA "Greenland", -2
DATA "Rio de Janeiro, Brazil", -3
DATA "Santiago de Chile", -4
DATA "New York", -5
DATA "Chicago", -6
DATA "Denver", -7
DATA "Seattle", -8
DATA "Alaska", -9
DATA "Honolulu", -10
DATA "Midway Island", -11
'' no GMT - 12
DATA "New Zealand", 12
DATA "Solomon Islands", 11
DATA "Sydney", 10
DATA "Tokyo", 9
DATA "Hong Kong and China", 8 '' obsolete? Hong Kong is once again part of China..
DATA "Bangkok", 7
DATA "Omsk, Russia", 6
DATA "Karachi", 5
DATA "Stalingrad", 4
DATA "Moscow", 3
DATA "Cairo", 2
DATA "Berlin", 1

TYPE TimeZone
   place AS STRING * 22
   gmtoffset AS INTEGER
END TYPE

DIM SHARED zones(23) AS TimeZone

'DECLARE FUNCTION pickzone% (title AS STRING)
'DECLARE FUNCTION gmtoffsettostring$ (gmtoffset AS INTEGER)
'DECLARE FUNCTION picktime (title AS STRING, h AS INTEGER, m AS INTEGER)
'DECLARE FUNCTION zerostring$ (n AS INTEGER, chars AS INTEGER)

DIM i AS INTEGER, s AS STRING, n AS INTEGER
DIM localzone AS INTEGER, remotezone AS INTEGER
DIM localtime AS STRING
DIM h AS INTEGER, m AS INTEGER, d AS INTEGER
DIM number AS STRING

'' get data
RESTORE tzdata
FOR i = 0 TO UBOUND(zones)
   READ s, number
   n = VAL(number)
   zones(i).place = s
   zones(i).gmtoffset = n
NEXT i

localzone = pickzone("Local time zone  (arrow keys to select, Enter to accept)")
IF localzone = -1 THEN END
remotezone = pickzone("Remote time zone (arrow keys to select, Enter to accept) ")
IF remotezone = -1 THEN END

PRINT "Local time zone:  "; zones(localzone).place;
PRINT gmtoffsettostring$(zones(localzone).gmtoffset)
PRINT "Remote time zone: "; zones(remotezone).place;
PRINT gmtoffsettostring$(zones(remotezone).gmtoffset)
PRINT
PRINT "Enter local time (up/down keys to change field, left/right keys to select field, Enter to accept) (24-hour format)"
PRINT
IF picktime("Local time:", h, m) = -1 THEN END

'' calculate remote time
h = h - zones(localzone).gmtoffset
h = h + zones(remotezone).gmtoffset

IF h < 0 THEN
   d = -1
   h = h + 24
ELSEIF h > 23 THEN
   d = 1
   h = h - 24
END IF

PRINT
COLOR 7
PRINT "Remote time: "
COLOR 15
PRINT zerostring$(h, 2); ":"; zerostring$(m, 2); " ";
IF d < 0 THEN
   PRINT "-";
ELSEIF d > 0 THEN
   PRINT "+";
ELSE
   PRINT
END IF
IF d <> 0 THEN PRINT zerostring$(ABS(d), 1); " day"
COLOR 7
PRINT
PRINT "Press any key to exit..."
DO WHILE LEN(INKEY$) = 0
LOOP

DEFSNG A-Z
FUNCTION gmtoffsettostring$ (gmtoffset AS INTEGER)
   IF gmtoffset > 0 THEN
      gmtoffsettostring = "GMT +" + STR$(gmtoffset)
   ELSE
      gmtoffsettostring = "GMT -" + STR$(-gmtoffset)
   END IF
END FUNCTION

FUNCTION picktime% (title AS STRING, h AS INTEGER, m AS INTEGER)
DIM row AS INTEGER, hr AS INTEGER, mn AS INTEGER, ed AS INTEGER
DIM k AS STRING
   PRINT title
   COLOR 15
   row = CSRLIN
   hr = 0
   mn = 0
   ed = 0
   LOCATE row, 1, 0 ' hide cursor
   PRINT zerostring(hr, 2); ":"; zerostring(mn, 2)
   PRINT "^^";
   DO
      k = INKEY$
      IF LEN(k) = 1 THEN
         IF k = CHR$(10) OR k = CHR$(13) THEN
            h = hr
            m = mn
            picktime = 0
            EXIT DO
         ELSEIF k = CHR$(27) THEN
            picktime = -1
            EXIT DO
         END IF
      ELSEIF LEN(k) = 2 THEN
         IF ed = 0 THEN
            SELECT CASE ASC(RIGHT$(k, 1))
               CASE 77 ' right
                  ed = 1
                  LOCATE row + 1, 1
                  PRINT "   ^^";
               CASE 72 ' up
                  hr = hr + 1
                  IF hr >= 24 THEN hr = 0
                  LOCATE row, 1
                  PRINT zerostring(hr, 2);
               CASE 80 ' down
                  hr = hr - 1
                  IF hr <= -1 THEN hr = 23
                  LOCATE row, 1
                  PRINT zerostring(hr, 2);
            END SELECT
         ELSE
            SELECT CASE ASC(RIGHT$(k, 1))
               CASE 75 ' left
                  ed = 0
                  LOCATE row + 1, 1
                  PRINT "^^   ";
               CASE 72 ' up
                  mn = mn + 1
                  IF mn >= 60 THEN mn = 0
                  LOCATE row, 4
                  PRINT zerostring(mn, 2);
               CASE 80 ' down
                  mn = mn - 1
                  IF mn <= -1 THEN mn = 60
                  LOCATE row, 4
                  PRINT zerostring(mn, 2);
            END SELECT
         END IF
      END IF
   LOOP
   LOCATE row + 1, 1
   PRINT "     ";
   LOCATE row + 1, 1, 1 ' show cursor
END FUNCTION

FUNCTION pickzone% (title AS STRING)
DIM i AS INTEGER, s AS STRING
DIM k AS STRING
DIM curr AS INTEGER
   CLS
   LOCATE 1, 1, 0   ' hide cursor
   PRINT title
   FOR i = 0 TO 23
      LOCATE 2 + i, 3
      PRINT zones(i).place;
      LOCATE 2 + i, 3 + 30 + 1
      PRINT gmtoffsettostring(zones(i).gmtoffset);
   NEXT i
   curr = 0
   LOCATE curr + 2, 1
   PRINT ">";
   DO
      k = INKEY$
      IF LEN(k) = 1 THEN
         IF k = CHR$(13) OR k = CHR$(10) THEN
            pickzone = curr
            EXIT DO
         ELSEIF k = CHR$(27) THEN ' escape
            pickzone = -1
            EXIT DO
         END IF
      ELSEIF LEN(k) = 2 THEN
         SELECT CASE ASC(RIGHT$(k, 1))
            CASE 80, 77 ' down, right
               IF curr < UBOUND(zones) THEN
                  LOCATE curr + 2, 1
                  PRINT " ";
                  curr = curr + 1
                  LOCATE curr + 2, 1
                  PRINT ">";
               END IF
            CASE 72, 75 ' up, left
               IF curr > 0 THEN
                  LOCATE curr + 2, 1
                  PRINT " ";
                  curr = curr - 1
                  LOCATE curr + 2, 1
                  PRINT ">";
               END IF
         END SELECT
      END IF
   LOOP

exitfunc:
   CLS
   LOCATE 1, 1, 1 ' show cursor
END FUNCTION

FUNCTION zerostring$ (n AS INTEGER, chars AS INTEGER)
DIM s AS STRING
   s = LTRIM$(RTRIM$(STR$(n)))
   IF LEN(s) < chars THEN
      s = STRING$(chars - LEN(s), ASC("0")) + s
   END IF
   zerostring = s
END FUNCTION
Reply


Messages In This Thread
Timezone calculator. - by Moneo - 07-15-2005, 06:01 AM
Timezone calculator. - by DrV - 07-15-2005, 06:24 AM
Timezone calculator. - by Moneo - 07-15-2005, 11:29 PM
Timezone calculator. - by rpgfan3233 - 07-15-2005, 11:40 PM
Timezone calculator. - by Moneo - 07-15-2005, 11:56 PM
Timezone calculator. - by Deleter - 07-16-2005, 03:13 AM
Timezone calculator. - by rpgfan3233 - 07-16-2005, 04:43 AM
Timezone calculator. - by Moneo - 07-16-2005, 05:01 AM
Timezone calculator. - by rpgfan3233 - 07-16-2005, 05:13 AM
Timezone calculator. - by Moneo - 07-16-2005, 06:14 AM
Timezone calculator. - by Moneo - 07-16-2005, 11:58 PM
Re: Timezone calculator. - by Diroga - 07-17-2005, 10:21 AM
Timezone calculator. - by anarky - 07-17-2005, 01:07 PM
Timezone calculator. - by Moneo - 07-17-2005, 10:31 PM
Timezone calculator. - by Moneo - 07-20-2005, 12:14 AM
Timezone calculator. - by DrV - 07-20-2005, 12:22 AM
Timezone calculator. - by anarky - 07-20-2005, 05:07 PM
Timezone calculator. - by Moneo - 07-20-2005, 11:52 PM
Timezone calculator. - by rpgfan3233 - 07-21-2005, 12:13 AM
Timezone calculator. - by Moneo - 07-21-2005, 12:57 AM
Timezone calculator. - by rpgfan3233 - 07-21-2005, 01:37 AM
Timezone calculator. - by Moneo - 07-27-2005, 06:11 AM
Timezone calculator. - by rpgfan3233 - 07-27-2005, 10:11 AM
Timezone calculator. - by DrV - 07-27-2005, 05:50 PM
Timezone calculator. - by anarky - 07-27-2005, 06:04 PM
Timezone calculator. - by Moneo - 07-28-2005, 02:26 AM
Timezone calculator. - by anarky - 07-29-2005, 07:59 PM
Timezone calculator. - by rpgfan3233 - 07-29-2005, 08:44 PM
Timezone calculator. - by DrV - 07-29-2005, 08:50 PM
Timezone calculator. - by Moneo - 07-29-2005, 10:54 PM
Timezone calculator. - by Moneo - 07-29-2005, 11:00 PM
Timezone calculator. - by anarky - 07-29-2005, 11:01 PM
Timezone calculator. - by rpgfan3233 - 07-29-2005, 11:28 PM
Timezone calculator. - by DrV - 07-30-2005, 12:09 AM
Timezone calculator. - by anarky - 07-30-2005, 03:53 AM
Timezone calculator. - by Moneo - 07-30-2005, 05:13 AM
Timezone calculator. - by Moneo - 07-30-2005, 05:28 AM
Timezone calculator. - by rpgfan3233 - 07-30-2005, 07:35 AM
Timezone calculator. - by DrV - 07-30-2005, 09:37 AM
Timezone calculator. - by Moneo - 07-31-2005, 04:07 AM
Timezone calculator. - by anarky - 07-31-2005, 01:33 PM
Timezone calculator. - by Moneo - 08-01-2005, 04:32 AM
Timezone calculator. - by Moneo - 08-01-2005, 05:13 AM
Timezone calculator. - by rpgfan3233 - 08-01-2005, 08:29 AM
Timezone calculator. - by Moneo - 08-01-2005, 09:08 AM
Timezone calculator. - by anarky - 08-01-2005, 05:03 PM
Timezone calculator. - by Moneo - 08-02-2005, 03:41 AM
Timezone calculator. - by Moneo - 08-02-2005, 03:47 AM
Timezone calculator. - by Moneo - 08-05-2005, 06:36 AM
Timezone calculator. - by anarky - 08-07-2005, 04:05 PM
Timezone calculator. - by Moneo - 08-07-2005, 10:47 PM
Timezone calculator. - by anarky - 08-08-2005, 07:41 PM
Timezone calculator. - by Moneo - 08-09-2005, 11:25 PM
Timezone calculator. - by DrV - 08-09-2005, 11:31 PM
Timezone calculator. - by Moneo - 08-09-2005, 11:33 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)