Kalender Monat in Klartext vom Sytem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Kalender Monat in Klartext vom Sytem

Beitrag von edel »

Erster Tag im Monat - 1

gruss
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Nino »

Velindos hat geschrieben:Zur Zeit Lese ich das aktuelle Systemdatum mit dieser Procedure aus!
Ich würde dazu PureBasics Date()-Funktion verwenden.
Velindos hat geschrieben:Was mir aber fehlt ist die Anzahl der Tage eines Monates
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.
Benutzeravatar
HeX0R
Beiträge: 2958
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Kalender Monat in Klartext vom Sytem

Beitrag von HeX0R »

Da braucht man doch keine Tabelle, Edel hat doch völlig Recht, mal abgesehen davon, dass es Folgemonat heissen müsste.

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)
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Kalender Monat in Klartext vom Sytem

Beitrag von mk-soft »

Hatte ich schon mal gebastelt und wieder verloren ...

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 ))
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Nino »

@Hexor:
:allright:

Wenn edel etwas ausführlicher geschrieben hätte was er meint, hätte ich es vielleicht verstanden. :-)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Kalender Monat in Klartext vom Sytem

Beitrag von ccode_new »

Hier ist mal meine Version :mrgreen:

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)

Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
HeX0R
Beiträge: 2958
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Kalender Monat in Klartext vom Sytem

Beitrag von HeX0R »

Ist dir langweilig? :lol:
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Velindos »

Hallo Leute,

gleich vor ab, besten DANK für eure Unterstützung und lebhafte Diskusion!
Ansatz war das ich mir die Tabelle erspare was nun der Fall ist.
Jetzt ist mein Kalender für 2020 gerüstet ...

Noch ein gutes und gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten