| |
|
|
p.specht
| In EU-Europa beginnt die Zählung der Wochentage einer (Arbeits-)Woche mit Montag = 1. Die erste Kalenderwoche ist jene, bei der die überwiegende Zahl von Tagen bereits im laufenden Jahr liegen, wenn der Neujahrstag also ein Donnerstag oder später ist. Darum kommt im nachfolgenden Programm der Berechnung des Wochentagsnummer des Neujahrstages besondere Bedeutung zu.
Eine Ausgabe KW=0 bedeutet dann, daß der gesuchte Tag noch zur 53. Woche des Vorjahres zählt. Der Algorithmus arbeitet ab dem 01.01.1583 und ist vom Unix-Jahr_2038-Fehler nicht betroffen.
Zit. Wiki: " Jedes Jahr hat entweder 52 oder 53 Kalenderwochen. - Ein Normaljahr mit 53 Wochen beginnt an einem Donnerstag und endet an einem Donnerstag. - Ein Schaltjahr mit 53 Wochen beginnt entweder an einem Mittwoch und endet an einem Donnerstag oder es beginnt an einem Donnerstag und endet an einem Freitag. - - Der 29., 30. und 31. Dezember können schon zur Kalenderwoche 1 des Folgejahres gehören. - - Der 1., 2. und 3. Januar können noch zu der letzten Kalenderwoche des Vorjahres gehören."
DIN 1355-1 führte zum 1. Januar 1976 eine entsprechende Zählweise mit Montag als ersten Wochentag im deutschen Sprachraum ein.
WindowTitle upper$("Europäische Kalenderwochennummer eines bestimmten Datums")
WindowStyle 24:declare jahr&,monat&,tag&:font 2'BETA-VERSION OHNE JEDE GEWÄHR!
looop:
CLS:print "\n Jahr = ";:input jahr&:print " Monat = ";:input monat&
print " Tag = ";:input tag&:print
if WTNr(jahr&,monat&,tag&)<1:print " Eingabefehler! (Jahr<1583 o.ähnl.)":goto "resum":endif
casenot SJ(jahr&):print " Kein";:print " Schaltjahr!"
print " Dieser ";TN(jahr&,monat&,tag&);".Tag des Jahres";
print " liegt in der ";KW(jahr&,monat&,tag&);".KW";
case KW(jahr&,monat&,tag&)=0:print " bzw. die 53.KW des Vorjahres,";
print "\n und ist der ";WTNr(jahr&,monat&,tag&);".Tag dieser Woche (Zählung beginnt mit Mo)."
print " Es handelt sich um einen ";WTStr$(WTNr(jahr&,monat&,tag&));" (";WTsStr$(WTNr(jahr&,monat&,tag&));")"
resum:
print:waitinput:goto "Looop"
END
proc SJ :parameters jahr&:case jahr&<1583:return -1'SCHALTJAHR
var sj&=0:ifnot jahr& mod 4:sj&=1:ifnot jahr& mod 100:sj&=0
casenot jahr& mod 400:sj&=1:endif:endif:return sj&
endproc
proc TN :parameters jahr&,monat&,tag&'TAGNUMMER IM JAHR
case (jahr&<1583) or (monat&<1) or (monat&>12):return -1
var tn&=val(substr$("0 31 59 90 120 151 181 212 243 273 304 334 365",monat&," "))+tag&
case monat&<3:return tn&:case SJ(jahr&):inc tn&:return tn&
endproc
proc WTNr :parameters jahr&,monat&,tag&
case jahr&<1583:return -1'WOCHENTAG-Nr
var WTNrNJ&=WTNrNJ(jahr&)
var TN&=TN(jahr&,monat&,tag&)
var WTNr& = ( ((TN&-1) mod 7)+(WTNrNJ&-1)) mod 7 + 1
return WTNr&
endproc
proc WTsStr$ :parameters WTNr&'WOCHENTAG-shortString
return substr$("Mo Di Mi Do Fr Sa So",WTNr&," ")
endproc
proc WTStr$ :parameters WTNr& :return substr$(\
"Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag",WTNr&," ")
endproc' = WOCHENTAG-NAME
proc WTNrNJ :parameters jahr&'WOCHENTAG-Nr_des_Neujahrstages
case jahr&<1583:return -1:var AJ&=jahr&-1201
var WT&=1+AJ&+int(AJ&/4)-int(AJ&/100)+int(AJ&/400)
WT&=WT& mod 7: case wt&=0:wt&=7:return WT&' 1="Montag"
endproc
Proc KW :parameters jahr&,monat&,tag&
var WT&=WTNrNJ(jahr&)'KALENDERWOCHE
var WN&=TN(jahr&,monat&,tag&)+WT&-2
case WT&<5:WN&=WN&+7
WN&=int(WN&/7):return WN&
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 20.05.2021 ▲ |
|
|
|