There's a couple of bugs in this code that I just found. Ick! Shame on me! I've pasted the fixed code in-line.
Glen > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Behalf Of Glen Batchelor > Sent: Friday, February 23, 2007 12:49 PM > To: [email protected] > Subject: RE: [U2] UD: Best way to convert GMT date/times to internal? > > > I think this is posted a long time ago on the d3www/mvwww > sourceforge site > as well. Hack it up and mangle it all you want. This is to convert current > time into GMT and pass the ISO zone difference as a standalone > var. For your > need, you'll have to reverse engineer it. This was written on D3, but it > should be vanilla code. > SUBROUTINE GMT(GMT,ISOZONEDIFF) ! ! CONVERT CURRENT ZONE TIME TO GMT ! DAYLIGHT SAVINGS FOR NORTH AMERICA ONLY ! ! ATL = 4 HOUR DIFFERENCE ! EST = 5 HOUR DIFFERENCE ! EDT = 4 HOUR DIFFERENCE ! CST = 6 HOUR DIFFERENCE ! CDT = 5 HOUR DIFFERENCE ! MST = 7 HOUR DIFFERENCE ! MDT = 6 HOUR DIFFERENCE ! PST = 8 HOUR DIFFERENCE ! PDT = 7 HOUR DIFFERENCE ! ALA = 9 HOUR DIFFERENCE ! HAW = 10 HOUR DIFFERENCE ! SDAY = '' EDAY = '' ATL = "-04:00" ATLDIFF=4 EST = "-05:00" ESTDIFF=5 EDT = "-04:00" EDTDIFF=4 CST = "-06:00" CSTDIFF=6 CDT = "-05:00" CDTDIFF=5 MST = "-07:00" MSTDIFF=7 MDT = "-06:00" MDTDIFF=6 PST = "-08:00" PSTDIFF=8 PDT = "-07:00" PDTDIFF=7 ALA = "-09:00" ALADIFF=9 HAW = "-10:00" HAWDIFF=10 ! ! CHANGE THE FOLLOWING TWO NUMBERS TO REFERENCE YOUR HOURLY DIFFERENCE ! ! DAYLIGHTSAVINGS (DST) VARIABLES CAN BE SET TO NULL, IF YOU SET THE ! DAYLIGHTSAVINGS FLAG TO ZERO. THIS SHOULD ONLY BE DONE FOR ZONES ! THAT DO NOT UTILIZE DST. ! DAYLIGHTSAVINGS=1 MYZONE=EST MYDSTZONE=EDT MYDIFF=ESTDIFF MYDSTDIFF=EDTDIFF ! LOCALTIME = TIME() GMT='' YR=OCONV(DATE(),'DY') ! FIGURE OUT THE EXACT START AND END DATES FOR DAYLIGHT SAVINGS TIME ! FOR THIS YEAR ! !#NORTH AMERICAN DST STARTS ON THE FIRST SUNDAY OF APRIL AND ENDS ON !#THE LAST SUNDAY OF OCTOBER. ! !NORTH AMERICAN DST CHANGED TO SECOND SUNDAY IN MARCH -> FIRST SUNDAY IN NOVEMBER ! AS OF 02/2007 ! IF DAYLIGHTSAVINGS=1 THEN TDT="03/01/":YR ITDT=ICONV(TDT,'D4/') TDTE="11/01/":YR IDTE=ICONV(TDTE,'D4/') SUNDAYS = 0 FOR X = 1 TO 31 DOW=OCONV(ITDT,'DW') MON=OCONV(ITDT,'DMA') IF MON # "March" THEN GO 100 IF DOW = 7 THEN SUNDAYS = SUNDAYS + 1 END IF SUNDAYS = 2 THEN SDAY = X GO 100 END ITDT=ITDT+1 NEXT X IF MON # "November" THEN GO 200 100 FOR X = 1 TO 31 DOW=OCONV(IDTE,'DW') MON=OCONV(IDTE,'DMA') IF DOW = 7 THEN EDAY = X GO 200 END IDTE=IDTE+1 NEXT X 200 EDTSTART = "03/":SDAY:"/":YR EDTSTART = ICONV(EDTSTART,'D4/') EDTEND = "11/":EDAY:"/":YR EDTEND = ICONV(EDTEND,'D4/') IF DATE() >= EDTSTART AND DATE() <= EDTEND THEN LOCALTIME=TIME() GMT=LOCALTIME+(60*60*MYDSTDIFF) ISOZONEDIFF=MYDSTZONE END ELSE LOCALTIME=TIME() ISOZONEDIFF = MYZONE GMT=LOCALTIME+(60*60*MYDIFF) END END ! ! NO DAYLIGHT SAVINGS ! IF DAYLIGHTSAVINGS = 0 THEN LOCALTIME=TIME() GMT=LOCALTIME+(60*60*MYDIFF) ISOZONEDIFF=MYZONE END RETURN > ------------------------------------------- > Glen Batchelor > IT Director > All-Spec Industries > phone: (910) 332-0424 > fax: (910) 763-5664 > e-mail: [EMAIL PROTECTED] > ------------------------------------------- > www.allspec.com > ------------------------------------------- > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:owner-u2- > > [EMAIL PROTECTED] On Behalf Of Raymond DeGennaro II > > Sent: Friday, February 23, 2007 10:49 AM > > To: [email protected] > > Subject: Re: [U2] UD: Best way to convert GMT date/times to internal? > > > > >It seems to me that you've left out a great deal of what you are > > >trying to get. > > > > Sorry, I'm looking to convert a GMT date/time group that is DST-less > > and in Zulu-time to the local date/time (several timezones east and > > potentially shifted another hour by DST). The data is coming from a > > service provider and we have no control over the format. The data is > > sent as ISO8601 DTG's like: YYYY-MM-DDThh:mm:ss-00:00 (The time zone > > offset is always 00:00) and a minimal character format: > > YYYYMMDDHHMMSS, depending whether the transaction is being passed > > real-time or as part of a batch mode data file. The sub-string > > access is easy, it's the timezone/DST translation that I'm looking to > > do "The Right Way". > > > > At 12:13 +1100 2007/02/23, Boydell, Stuart wrote: > > >To answer to your question - storing the date/time as unix epoch > > >((milli)seconds from 1970-01-01T00:00Z) is probably the most > > >convenient method of storing a pure timestamp, Combine that with > > >locality information of an event and you can re-infer the local time > > >the event occurred. > > > > The original data is archived, it's just that for integration with > > the existing dataset, and reporting purposes, the date/time needs to > > be converted into internal format in local time. > > > > So, in the case for one customer, if the timestamp received is 1am > > "today" it would actually need to be stored as 7am "yesterday" (up > > until DST kicks in) or 8am "yesterday" (after DST kicks in). > > > > Ray > > > > -- > > .=====================================================================. > > | =-=-=-=-=-=-=-= Eagle Rock Information Systems Corp =-=-=-=-=-=-=-= | > > | -=-=-=-=-=-=-=- web and database business solutions -=-=-=-=-=-=-=- | > > | <http://www.eriscorp.com> <mailto:[EMAIL PROTECTED]> | > > |Midwest Regional Office: 626-535-9658x216 (voice) 626-628-3229 (eFax)| > > .=====================================================================. > > ------- > > u2-users mailing list > > [email protected] > > To unsubscribe please visit http://listserver.u2ug.org/ > ------- > u2-users mailing list > [email protected] > To unsubscribe please visit http://listserver.u2ug.org/ ------- u2-users mailing list [email protected] To unsubscribe please visit http://listserver.u2ug.org/
