mirror of
https://github.com/PDP-10/its.git
synced 2026-02-15 04:16:21 +00:00
Support for time zones and non-US DST
Use bits in .RYEAR/.RLPDTM result to return a local time zone, TZONE (definable in SYSTEM;CONFIG). TZONE should be the integer timezone offset (hours West of UTC) Bit 4.4 => timezone known (otherwise, assume EST/EDT = 5) Bit 4.3 => sign bit of timezone offset Bits 3.5-3.1 => absolute value of timezone offset If DSTEU is defined and != 0, calculate daylight savings time according to European Union rules: - starts at 2:00 (standard time) on the last Sunday in March, - ends at 2:00 (standard time) on the last Sunday in October.
This commit is contained in:
committed by
Lars Brinkhoff
parent
978d362813
commit
a65a038146
@@ -196,6 +196,19 @@ GLPDTM: CONO PI,CLKOFF ;AVOID DOUBLE YEAR INCREMENT
|
||||
PUSH P,A ;SAVE # SECONDS DURING NEXT CALL
|
||||
PUSHJ P,GDWOBY ;GET DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
|
||||
DPB B,[270300,,E] ;DEPOSIT IN RIGHT PLACE
|
||||
IFDEF TZONE,[
|
||||
;;[BV] timezone hack:
|
||||
;; 4.4 => Timezone known
|
||||
;; 4.3 => sign bit of timezone offset from UTC (hours West of UTC)
|
||||
;; 3.5-3.1 => absolute value of timezone offset from UTC (fixnum)
|
||||
TLO E,10000 ;Set TZ known bit (4.4)
|
||||
IFL TZONE,[ ;; negative offset
|
||||
TLO E,4000 ;Set TZ sign bit (4.3)
|
||||
MOVEI A,-TZONE
|
||||
]
|
||||
.ELSE MOVEI A,TZONE
|
||||
DPB A,[230400,,E] ;3.5-3.1 is ABS(TZONE)
|
||||
]
|
||||
POP P,A ;RESTORE A
|
||||
AOS (P) ;CAUSE RETURN TO SKIP
|
||||
|
||||
@@ -204,12 +217,24 @@ GLPDTM: CONO PI,CLKOFF ;AVOID DOUBLE YEAR INCREMENT
|
||||
GLPDT2: JFCL ;POPJ FOR STD TIME
|
||||
;JRST CRDDST FOR DAY LIGHT TIME
|
||||
;JFCL "NORMAL"
|
||||
IFDEF DSTEU,IFN DSTEU,[
|
||||
;; [BV] hack DST for EU rules
|
||||
CAML A,[<MAR <31.-6>>*SPD+7200.] ;If before 2am last Sunday in March,
|
||||
CAML A,[<OCT 31.>*SPD+7200.] ;or after 2am Oct 31 (standard time!),
|
||||
POPJ P, ;then obviously standard time
|
||||
CAML A,[<MAR 31.>*SPD+7200.] ;If before 2am March 31,
|
||||
CAML A,[<OCT <31.-6>>*SPD+7200.] ;or after 2am possbly last Sunday in October,
|
||||
JRST GLPDT3 ;then we have to compute
|
||||
;; else it's obviously DST
|
||||
]
|
||||
.ELSE [
|
||||
CAML A,[<APR 1>*SPD+7200.] ;IF BEFORE 2AM APR 1,
|
||||
CAML A,[<OCT 31.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCT 31,
|
||||
POPJ P, ;THEN OBVIOUSLY STANDARD TIME IS IN EFFECT
|
||||
CAML A,[<APR 7>*SPD+7200.] ;IF BEFORE 2AM APR 7 STANDARD TIME,
|
||||
CAML A,[<OCT 25.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCTOBER 25,
|
||||
JRST GLPDT3 ;THEN NOT OBVIOUS
|
||||
]
|
||||
CRDDST: TLO E,100000 ;DAYLIGHT SAVINGS TIME, SET BIT IN E
|
||||
ADDI A,3600. ;CONTINUE TO LOCALIZE THE TIME THAT WILL BE RETURNED
|
||||
POPJ P,
|
||||
@@ -238,12 +263,20 @@ GLPDT3: PUSH P,A ;SAVE # SECS
|
||||
POP P,A ;DAYLIGHT SAVINGS TIME, RESTORE A
|
||||
JRST CRDDST ;MUNG A AND E AND RETURN
|
||||
|
||||
IFDEF DSTEU,IFN DSTEU,[
|
||||
CRDSB: 7200. ;In Mar changes at 2AM (standard time)
|
||||
7200. ;In October also changes at 2AM (standard time!)
|
||||
|
||||
CRDTST: CAIGE A,<MAR <31.-6>> ;First possible last Sunday in March
|
||||
CAIL A,<OCT <31.-6>> ;First possible last Sunday in October
|
||||
]
|
||||
.ELSE [
|
||||
CRDSB: 7200. ;IN APR CHANGES AT 2AM EST
|
||||
3600. ;IN OCTOBER CHANGES AT 1AM EST
|
||||
|
||||
CRDTST: CAIGE A,<APR 1>
|
||||
CAIL A,<OCT 25.>
|
||||
|
||||
]
|
||||
;IF LEAP YEAR THEN SET BIT 4.8 OF E
|
||||
;IF NOT LEAP YEAR THEN IF AFTER FEB 28 THEN SET BIT 4.9 OF E AND ADD SPD TO A
|
||||
|
||||
Reference in New Issue
Block a user