Re: Kalender Monat in Klartext vom Sytem
Verfasst: 03.01.2020 11:55
Erster Tag im Monat - 1
gruss
gruss
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Ich würde dazu PureBasics Date()-Funktion verwenden.Velindos hat geschrieben:Zur Zeit Lese ich das aktuelle Systemdatum mit dieser Procedure aus!
Dazu kann man eine kleine "Tabelle" (in Form eines Array oder von "Select"-Anweisungen) mit zusätzlicher Berücksichtigung der Schaltjahre benutzen. Sowas findet sich mehrfach im Forum.Velindos hat geschrieben:Was mir aber fehlt ist die Anzahl der Tage eines Monates
Code: Alles auswählen
Procedure GetDaysOfMonth(year, month)
Protected Result
If month = 12
month = 0
year + 1
EndIf
month + 1
Result = Day(Date(year, month, 1, 0, 0, 0) - 1)
ProcedureReturn Result
EndProcedure
Debug GetDaysOfMonth(2020, 2)
Debug GetDaysOfMonth(2019, 2)
Debug GetDaysOfMonth(2020, 12)
Code: Alles auswählen
Procedure DayOfMonth(Date)
Protected date2, year, month
year = Year(date)
month = Month(date)
If month < 12
month + 1
Else
Month = 1
EndIf
date2 = Date(year, month, 1, 0, 0, 0) - 86400
ProcedureReturn Day(date2)
EndProcedure
Debug DayOfMonth(Date(2020, 2, 15,0 ,0 ,0 ))
Code: Alles auswählen
;untrustworthy
;keine Gewähr
Procedure.s Konvertiere_den_Datumswert(Datumswert.i) ;Konvertierungsfunktion
Protected.s ein_Datum
If Datumswert <> -1
ein_Datum = RSet(Str(Day(Datumswert)), 2, "0") + "." + RSet(Str(Month(Datumswert)), 2, "0") + "." + Str(Year(Datumswert))
ProcedureReturn ein_Datum
Else
ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
EndIf
EndProcedure
Procedure.s Sage_mir_den_Monatsnamen(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s) ;Anbei: Wieviel Speicher benötigt wohl mein Variablenname?
Protected.SYSTEMTIME ST
Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
Protected.s{10} Speicher_Puffer
ST\wDay = Val(StringField(ein_Datum, 1, "."))
ST\wMonth = Val(StringField(ein_Datum, 2, "."))
ST\wYear = Val(StringField(ein_Datum, 3, "."))
If GetDateFormat_(#Null, #Null, @ST, @"MMMM", @Speicher_Puffer, SizeOf(Speicher_Puffer))
ProcedureReturn Speicher_Puffer
Else
ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
EndIf
EndProcedure
Procedure.i Zaehle_die_Tage_im_Monat(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
Protected.SYSTEMTIME ST
Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
Protected.i ein_Datumswert
ST\wDay = 1
ST\wMonth = Val(StringField(ein_Datum, 2, "."))
ST\wYear = Val(StringField(ein_Datum, 3, "."))
ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0)
If ein_Datumswert <> -1
If ST\wMonth = 12
ST\wYear + 1
ST\wMonth = 1
Else
ST\wMonth + 1
EndIf
ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0) - 1
If ein_Datumswert > 0
ProcedureReturn Day(ein_Datumswert)
EndIf
Else
ProcedureReturn -1 ;"= Du hast ein ungültiges Datum eingegeben."
EndIf
EndProcedure
Procedure.b Ist_es_ein_Schaltjahr(jahr)
If Date(jahr, 2, 29, 0, 0, 0) <> -1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.i Sage_mir_die_Kalenderwoche(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s) ;Industrienorm DIN 1355
Protected.SYSTEMTIME ST
Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
Protected.i ein_Datumswert
Protected.i aktueller_Tach
Protected.i Wochentach1Jan
Protected.s neues_Datum
Protected.i Kalenderwoche
Protected.b IstSchaltjahr
ST\wDay = Val(StringField(ein_Datum, 1, "."))
ST\wMonth = Val(StringField(ein_Datum, 2, "."))
ST\wYear = Val(StringField(ein_Datum, 3, "."))
ein_Datumswert = Date(ST\wYear, ST\wMonth, ST\wDay, 0, 0, 0)
If ein_Datumswert <> -1
aktueller_Tach = DayOfYear(ein_Datumswert)
Wochentach1Jan = DayOfWeek(Date(ST\wYear, 1, 1, 0, 0, 0))
If Wochentach1Jan >= 5
Wochentach1Jan - 7
EndIf
If (aktueller_Tach + Wochentach1Jan) <= 1
neues_Datum = "31.12."+Str((ST\wYear - 1))
ProcedureReturn Sage_mir_die_Kalenderwoche(neues_Datum)
EndIf
Kalenderwoche = ((aktueller_Tach + Wochentach1Jan + 5) / 7)
If Kalenderwoche >= 1 And Kalenderwoche <= 53
If Kalenderwoche = 53
IstSchaltjahr = Ist_es_ein_Schaltjahr(ST\wYear)
If Not( (Wochentach1Jan = 4) Or (Wochentach1Jan = -3) Or ((Wochentach1Jan = 3) And IstSchaltjahr) Or ((Wochentach1Jan = -4) And IstSchaltjahr) )
Kalenderwoche = 1
EndIf
EndIf
ProcedureReturn Kalenderwoche
EndIf
Else
ProcedureReturn -1 ;"= Du hast ein ungültiges Datum eingegeben."
EndIf
EndProcedure
Procedure.s Sage_mir_den_Wochentag(Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
Protected.SYSTEMTIME ST
Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
Protected.s{10} Speicher_Puffer
ST\wDay = Val(StringField(ein_Datum, 1, "."))
ST\wMonth = Val(StringField(ein_Datum, 2, "."))
ST\wYear = Val(StringField(ein_Datum, 3, "."))
If GetDateFormat_(#Null, #Null, @ST, @"dddd", @Speicher_Puffer, SizeOf(Speicher_Puffer))
ProcedureReturn Speicher_Puffer
Else
ProcedureReturn "Du hast ein ungültiges Datum eingegeben."
EndIf
EndProcedure
Procedure Orakel(Anweisung.s, Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben.s)
Protected.i jahr, tag, monat
Protected.s ein_Datum = Bitte_ein_Datum_im_Format_DD_MM_JJJJ_eingeben
tag = Val(StringField(ein_Datum, 1, "."))
monat = Val(StringField(ein_Datum, 2, "."))
jahr = Val(StringField(ein_Datum, 3, "."))
Protected.i ein_Datumswert
ein_Datumswert = Date(jahr, monat, tag, 0, 0, 0)
If ein_Datumswert <> -1
Select Anweisung
Case "Sage_mir_den_Monatsnamen"
MessageRequester("Das Orakel antwortet:", "Das Datum liegt im "+ Sage_mir_den_Monatsnamen(ein_Datum) + ".", #PB_MessageRequester_Info)
Case "Sage_mir_den_Wochentag"
MessageRequester("Das Orakel antwortet:", "Dieses Datum fällt auf einen "+ Sage_mir_den_Wochentag(ein_Datum) + ".", #PB_MessageRequester_Info)
Case "Zaehle_die_Tage_im_Monat"
MessageRequester("Das Orakel antwortet:", "Der Monat hat maximal " + Str(Zaehle_die_Tage_im_Monat(ein_Datum)) +" Tage.", #PB_MessageRequester_Info)
Case "Sage_mir_die_Kalenderwoche"
If Sage_mir_die_Kalenderwoche(ein_Datum) >= 52 And monat = 1
jahr - 1
MessageRequester("Das Orakel antwortet:", "Diese ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW vom Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
ElseIf Sage_mir_die_Kalenderwoche(ein_Datum) = 1 And monat = 12
jahr + 1
MessageRequester("Das Orakel antwortet:", "Diese ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW vom Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
Else
MessageRequester("Das Orakel antwortet:", "Dies ist die " + Sage_mir_die_Kalenderwoche(ein_Datum) + ". KW im Jahr " + Str(jahr) + ".", #PB_MessageRequester_Info)
EndIf
Case "Ist_das_ein_Schaltjahr"
If Ist_es_ein_Schaltjahr(jahr)
MessageRequester("Das Orakel antwortet:", "Dies ist ein Schaltjahr.", #PB_MessageRequester_Info)
Else
MessageRequester("Das Orakel antwortet:", "Dies ist kein Schaltjahr.", #PB_MessageRequester_Info)
EndIf
Default
MessageRequester("Das Orakel antwortet:", "Deine Anweisung war undeutlich.", #PB_MessageRequester_Info)
EndSelect
Else
MessageRequester("Das Orakel antwortet:", "Ich kann mit deinem Datum nichts anfangen.", #PB_MessageRequester_Info)
EndIf
EndProcedure
;-Frage das Orakel
Global.s akt_Datum = Konvertiere_den_Datumswert(Date())
Orakel("Sage_mir_den_Monatsnamen", akt_Datum)
Orakel("Sage_mir_den_Wochentag", akt_Datum)
Orakel("Zaehle_die_Tage_im_Monat", akt_Datum)
Orakel("Sage_mir_die_Kalenderwoche", akt_Datum)
Orakel("Ist_das_ein_Schaltjahr", akt_Datum)