Deutsch
Quelltexte/ Codesnippets

Kalenderwoche aus Datum berechnen

 

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 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
20.05.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.403 Betrachtungen

Unbenanntvor 0 min.
Karl von Weizen vor 18 Tagen
Hans Neff24.01.2023
Rschnett06.08.2022
p.specht31.07.2022
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie