Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Utility / CALENDAR / Konstanty a struktury

Zdrojový kód: INCLUDE\UTIL\CALENDAR.INC, UTIL\CALENDAR.ASM


Konstanty a struktury


SPLITYEAR	EQU	1582		; split year Julian -> Gregorian
SPLITDATE	EQU	577737		; split day 10/15/1582

MINYEAR		EQU	-29226		; minimal year
MAXYEAR		EQU	+29227		; maximal year

MINDAY		EQU	-10675162	; minimal day
MAXDAY		EQU	+10674943	; maximal day

; MINTIME: -9223339968000000000
MINTIMEH	EQU	80001D2Ah	; minimal absolute time HIGH
MINTIMEL	EQU	9CB28000h	; minimal absolute time LOW

; MAXTIME: +9223151615999999999
MAXTIMEH	EQU	7FFF3787h	; maximal absolute time HIGH
MAXTIMEL	EQU	453FFFFFh	; maximal absolute time LOW

Konstanta SPLITYEAR (=1582) je rok přechodu z Juliánského na Gregoriánský kalendář. Konstanta SPLITDATE (=577737) je absolutní den začátku Gregoriánského kalendáře (tj. počet dnů od počátku letopočtu).

Konstanty MINYEAR (= -29226) a MAXYEAR (= +29227) představují minimální a maximální rok časového údaje. Podobně konstanty MINDAY (= -10675162) a MAXDAY (= +10674943) představují minimální a maximální den relativně k počátku letopočtu.

Konstany MINTIMEH, MINTIMEL, MAXTIMEH a MAXTIMEL jsou 32-bitové části minimálního a maximálního možného časového údaje vyjádřeného ve stovkách nanosekund.


; ------------- Date-time structure

struc		DATETIME

DATETIME_NSec:	resd	1		; 0: nanosecond (0 to 999'999'999)
DATETIME_Time:				; time entries (second, minute, hour)
DATETIME_Sec:	resb	1		; 4: second (0 to 59)
DATETIME_Min:	resb	1		; 5: minute (0 to 59)
DATETIME_Hour:	resb	1		; 6: hour (0 to 23)
DATETIME_WDay:	resb	1		; 7: day of week (1=Monday..7=Sunday)
DATETIME_Date:				; date entries (day, month, year)
DATETIME_Day:	resb	1		; 8: day in month (1 to 31)
DATETIME_Month:	resb	1		; 9: month (1 to 12)
DATETIME_Year:	resw	1		; 0Ah: year (year > 0 means CE,
					;	 year <= 0 means "1-BCE", e.g.
					; 	0 is 1 BCE, -1 is 2 BCE, ...)
					; (CE="Common Era" or AD="Anno Domini",
					;     BCE="Before the Common Era" or
					;     BC="Before Christ"

; Extended entries, generated with DateTimeExt function

DATETIME_YDay:	resw	1		; 0Ch: day in year (0 to 365)
DATETIME_Week:	resb	1		; 0Eh: week (1 to 53)
DATETIME_Flags:	resb	1		; 0Fh: flags
					;	B0: leap year,366 days else 365
					;	    (year 1582 has 355 days)
					;	B1: Gregorian calendar
					;	B2: 53 weeks (else 52)
					;	    (year 1582 has 51 weeks)
					;	B3: last week of previous year
					;	    (week=51 to 53, use year-1)
					;	B4: first week of next year
					;	    (week=1, use year+1)

endstruc				; size 16 bytes

Struktura DATETIME popisuje datum a čas ve tvaru rozloženém na jednotlivé složky.

DATETIME_NSec obsahuje počet nanosekund v rozsahu 0 až 999 999 999. DATETIME_Sec je sekunda (0 až 59), DATETIME_Min minuta (0 až 59), DATETIME_Hour hodina (0 až 23). Návěštím DATETIME_Time se lze odkázat na časový údaj jako na 32-bitové číslo.

DATETIME_WDay je den v týdnu podle normy ISO-8601 (1 až 7): 1=pondělí, 2=úterý, 3=středa, 4=čtvrtek, 5=pátek, 6=sobota, 7=neděle.

DATETIME_Day je den v měsíci (1 až 31), DATETIME_Month je měsíc (1 až 12). Položka DATETIME_Year udává rok. Jedná-li se o kladné číslo v rozsahu +1 až MAXYEAR (= +29227), představuje tento údaj rok našeho letopočtu (letopočet se počítá od roku 1). Je-li údajem nula nebo záporné číslo v rozsahu 0 až MINYEAR (= -29226), jedná se o zápornou hodnotu roku před naším letopočtem sníženého o 1. Hodnota 0 znamená tedy rok 1 př.n.l., hodnota -1 je rok 2 př.n.l., až hodnota -29226 je rok 29227 př.n.l. Návěštím DATETIME_Date se lze odkázat na datum jako na 32-bitové číslo.

DATETIME_YDay je den v roce v rozsahu 0 až 365. DATETIME_Week je číslo týdne v roce v rozsahu 1 až 53. Podle normy ISO-8601 je za první týden v roce (s číslem 1) považován týden, který obsahuje první čtvrtek kalendářního roku a 4. leden.

DATETIME_Flags jsou příznaky. Bit 0 je nastaven, jedná-li se o přechodný rok s 366 dny (jinak 365 dnů, nepřechodný rok 1582 má 355 dnů). Bit 1 indikuje Gregoriánský kalendář (jinak se jedná o Juliánský kalendář). Bit 2 označuje rok s 53 týdny (jinak 52 týdnů, jen rok 1582 má 51 týdnů). Bit 3 indikuje poslední týden předešlého roku (týden = 51 až 53, vztahuje se k roku sníženému o 1). Bit 4 indikuje první týden následujícího roku (týden = 1, platí pro rok zvýšený o 1).


Obsah / Utility / CALENDAR / Konstanty a struktury