Kalender Monat in Klartext vom Sytem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Kalender Monat in Klartext vom Sytem

Beitrag von Velindos »

Hallo Leute,

gibt es auch eine Möglickeit einen Kalendermonat, über ein beliebiges Datum aus dem System auszulesen? Damit hätte ich gleich den richtigen Monatsnamen nach jeweiligen Sprachpaket von Windows!

Ähnlich den Beispiel:

Code: Alles auswählen

Procedure.s GetDayMonth()
  Protected ST.SYSTEMTIME
  Protected Buffer.s = Space(#MAX_PATH + 1)
  GetSystemTime_(@ST)
  If GetDateFormat_(#Null,#DATE_LONGDATE,@ST,#Null,@Buffer,#MAX_PATH)
    ProcedureReturn Buffer
  EndIf
EndProcedure
Debug GetDayMonth()
... jedoch mit

Code: Alles auswählen

GetDayMonth(12.03.2020)
... März

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
HeX0R
Beiträge: 2960
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 steht doch alles!
Setze einfach ST entsprechend.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Velindos »

Hallo Leute,
habe die Sache Dank "ts-soft" und
viewtopic.php?f=6&t=2060
gelöst!

Hier das Beispiel:

Code: Alles auswählen

; in PB vordefiniert
; Structure SYSTEMTIME
; wYear.w
; wMonth.w
; wDayOfWeek.w
; wDay.w
; wHour.w
; wMinute.w
; wSecond.w
; wMilliseconds.w
; EndStructure


Global Kalender_Zeiger
Global Dim Kalender_Monat$(12)
Global Dim Kalender_Tag_Nr(12)
Global KalenderTagDerWoche
Global KalenderTagDerWoche$

Procedure.s GetDayMonth()
  ; ---------------------
  Define st.SYSTEMTIME, sDate.s{261}
  ; ---------------------
  ; Klartext MONAT
  GetSystemTime_(@st)
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"MMMM", @sDate, 260)
  Kalender_Monat$(Kalender_Zeiger) = sDate
  ; ---------------------
EndProcedure
Procedure.s GetKalender()
  Protected aktuellYear.w
  Protected aktuellMonth.w
  Protected aktuellDay.w
  
  Protected aktuellwHour.w
  Protected aktuellwMinute.w
  Protected aktuellwSecond.w
  
  ; variable für Systemtime deklarieren
  STime.SYSTEMTIME
  
  ; aktuelle Systemzeit ermitteln (Struktur füllen)
  GetSystemTime_(STime)
  Debug "Wir haben das Jahr " + Str(STime\wYear)
  Debug "Es ist der " + Str(STime\wMonth) + " Monat in diesem Jahr"
  
  ; aktuelles Jahr sichern
  aktuellYear.w = STime\wYear
  aktuellMonth.w = STime\wMonth
  aktuellDay.w = STime\wDay
  aktuellwHour.w = STime\wHour
  aktuellwMinute.w = STime\wMinute
  aktuellwSecond.w = STime\wSecond
  
  For Kalender_Zeiger = 1 To 12
    ; Systemuhr auf 2010 setzen
    STime\wYear = aktuellYear
    STime\wMonth = Kalender_Zeiger
    STime\wDay = 01
    SetLocalTime_(STime)
    Kalender_Tag_Nr(Kalender_Zeiger) = DayOfWeek(Date(2020, Kalender_Zeiger, 1, 0, 0, 0))  
    GetDayMonth()
  Next
  
  ; Delay(10000)
  
  ; Systemzeit zurückstellen
  STime\wYear = aktuellYear
  STime\wMonth = aktuellMonth
  STime\wDay = aktuellDay
  
  STime\wHour = aktuellwHour + 1
  STime\wMinute = aktuellwMinute
  STime\wSecond = aktuellwSecond
  
  SetLocalTime_(STime)
  Debug "Wir haben wieder das Jahr " + Str(STime\wYear)
  Debug "--------------------------------------"
EndProcedure
GetKalender()

For Kalender_Zeiger = 1 To 12
  Debug "Kalender_Monat$ = " + Kalender_Monat$(Kalender_Zeiger)
  KalenderTagDerWoche = Kalender_Tag_Nr(Kalender_Zeiger)
  If KalenderTagDerWoche = 0
    KalenderTagDerWoche$ = "So"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 1
    KalenderTagDerWoche$ = "Mo"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 2
    KalenderTagDerWoche$ = "Di"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 3
    KalenderTagDerWoche$ = "Mi"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 4
    KalenderTagDerWoche$ = "Do"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 5
    KalenderTagDerWoche$ = "Fr"
    ; ----------------------------------------------
  ElseIf KalenderTagDerWoche = 6
    KalenderTagDerWoche$ = "Sa"
    ; ----------------------------------------------
  EndIf
  ; ----------------------------------------------
  Debug " Der 1. fällt auf = " + KalenderTagDerWoche$
Next
Allen Pure Tüfftlern ein gutes neues JAHR 2020!

Gruss .. Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
HeX0R
Beiträge: 2960
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 »

:freak:
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Velindos »

Hallo Leute,
die 'Sache funzt unter Windows 7 aber nicht unter 8.1/10!

Code: Alles auswählen

; ts-soft 	

; https://www.purebasic.fr/german/viewtopic.php?f=6&t=2060

; in PB vordefiniert
; Structure SYSTEMTIME
  ; wYear.w
  ; wMonth.w
  ; wDayOfWeek.w
  ; wDay.w
  ; wHour.w
  ; wMinute.w
  ; wSecond.w
  ; wMilliseconds.w
; EndStructure
Global Aktuelles_Monat$ 

Procedure.s GetDayMonth()
  Protected ST.SYSTEMTIME
  Protected Buffer.s = Space(#MAX_PATH + 1)
  GetSystemTime_(@ST)
  If GetDateFormat_(#Null,#DATE_LONGDATE,@ST,#Null,@Buffer,#MAX_PATH)
    ProcedureReturn Buffer
  EndIf
EndProcedure

; variable für Systemtime deklarieren
STime.SYSTEMTIME

; aktuelle Systemzeit ermitteln (Struktur füllen)
GetSystemTime_(STime)
Debug "Wir haben das Jahr " + Str(STime\wYear)
Debug "Es ist der " + Str(STime\wMonth) + " Monat in diesem Jahr"

; aktuelles Jahr sichern
aktuellYear.w = STime\wYear
aktuellMonth.w = STime\wMonth
aktuellDay.w = STime\wDay

For K = 1 To 12
; Systemuhr auf 2010 setzen
; STime\wYear = 2020
STime\wMonth = K
STime\wDay = 01

SetLocalTime_(STime)

Debug ""
Debug "Wir haben das Jahr " + Str(STime\wYear)
Debug "Wir haben das Month " + Str(STime\wMonth)
Debug "Wir haben das wDay " + Str(STime\wDay)
Debug "Wir haben das Day " + Str(STime\wDayOfWeek)

Debug GetDayMonth()
; ein bißchen warten
Delay(1000)
Next
Delay(10000)

; Systemzeit zurückstellen
STime\wYear = aktuellYear
STime\wMonth = aktuellMonth
STime\wDay = aktuellDay
SetLocalTime_(STime)
Debug "Wir haben wieder das Jahr " + Str(STime\wYear)

Jemand eine Ahnung, warum man nur "<J>anuar" zurück bekommt!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
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:Hallo Leute,

gibt es auch eine Möglickeit einen Kalendermonat, über ein beliebiges Datum aus dem System auszulesen? Damit hätte ich gleich den richtigen Monatsnamen nach jeweiligen Sprachpaket von Windows!
Warum machst du so umständliche Sachen, wenn es doch nur darum geht die Monatsnamen in der jeweiligen Sprache zu bekommen?

Ich mache das so (unter Windows):

Code: Alles auswählen

EnableExplicit

Procedure.s LocalizedMonthName (MonthOfYear.i, short.i=#False)
   Protected fmt.i, buffer$, bufferSize.i=80
   
   If short
      fmt = #LOCALE_SABBREVMONTHNAME1
   Else
      fmt = #LOCALE_SMONTHNAME1
   EndIf
   
   buffer$ = Space(bufferSize)
   GetLocaleInfo_(#LOCALE_USER_DEFAULT, fmt + MonthOfYear - 1, @buffer$, bufferSize)
   
   ProcedureReturn buffer$
EndProcedure


; Demo
Define month

For month = 1 To 12
   Debug LocalizedMonthName(month)
Next   

Debug ""

For month = 1 To 12
   Debug LocalizedMonthName(month, #True)
Next
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Kalender Monat in Klartext vom Sytem

Beitrag von ccode_new »

Alles sehr verwirrend.

Simple:

Code: Alles auswählen

Procedure.s GetDayMonth(SysTime.s)
  Protected ST.SYSTEMTIME
  Protected Buffer.s{10}
  Protected Pattern.s = "MMMM"
  ST\wDay = Val(StringField(SysTime, 1, "."))
  ST\wMonth = Val(StringField(SysTime, 2, "."))
  ST\wYear = Val(StringField(SysTime, 3, "."))
  If GetDateFormat_(#Null,#Null,@ST,@Pattern, @Buffer, SizeOf(Buffer))
    ProcedureReturn Buffer
  EndIf
EndProcedure
Debug GetDayMonth("12.09.2020")
Zuletzt geändert von ccode_new am 02.01.2020 21:07, insgesamt 2-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Kalender Monat in Klartext vom Sytem

Beitrag von mk-soft »

Du must ein Speicherplatz für den String übergeben...

Code: Alles auswählen

Procedure.s GetDayMonth(SysTime.s)
  Protected ST.SYSTEMTIME
  Protected Buffer.s = Space(80)
  Protected Pattern.s = "MMMM"
  ST\wDay = Val(StringField(SysTime, 1, "."))
  ST\wMonth = Val(StringField(SysTime, 2, "."))
  ST\wYear = Val(StringField(SysTime, 3, "."))
  If GetDateFormat_(#LOCALE_USER_DEFAULT,#Null,@ST,@Pattern, @Buffer, Len(Buffer))
    ProcedureReturn Buffer
  EndIf
EndProcedure
Debug GetDayMonth("12.10.2020")
Zuletzt geändert von mk-soft am 02.01.2020 20:23, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Sicro »

Im CodeArchiv ist auch noch ein Include-Code, der neben Windows auch Linux und MacOS unterstützt: FormatDateEx.pbi
Beispiele gibt es ganz unten im Code.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Kalender Monat in Klartext vom Sytem

Beitrag von Velindos »

Hallo Leute!
"Warum machst du so umständliche Sachen,
wenn es doch nur darum geht die Monatsnamen in der jeweiligen Sprache zu bekommen?"
Naja, weil ich jeden Tag hunterte Kalender programmiere und somit reichlich an Arbeit sammle!

Spass ohne, Danke für eure Vorschläge, vereinfachen die Sache ungemein!
Zur Zeit Lese ich das aktuelle Systemdatum mit dieser Procedure aus!

Code: Alles auswählen

  EnableExplicit
Procedure.s Get_System_Datum_Aktuell()
  ; ---------------------
  Define st.SYSTEMTIME, sDate.s{261}
  ; ---------------------
  ; Klartext MONAT
  GetSystemTime_(@st)
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"yyyy", @sDate, 260)
  Global Aktuelles_Jahr$ = sDate
  Global Aktuelles_Jahr = Val(sDate)
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"MMMM", @sDate, 260)
  Global Aktuelles_Monat$ = sDate
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"MM", @sDate, 260)
  Global Aktuelles_Monat_Nr = Val(sDate)
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"dddd", @sDate, 260)
  Global Aktuelles_Tag$ = sDate
  ; ---------------------
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"d", @sDate, 260)
  Global Aktuelles_Tag_Nr$ = sDate
  ; ---------------------
  ; GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"dddd, d.MMMM yyyy", @sDate, 260)
  GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, @"dddd, d.MMMM ", @sDate, 260)
  Global Aktuelles_Datum$ = sDate
  ; ---------------------
  ProcedureReturn Aktuelles_Datum$
EndProcedure

Debug Get_System_Datum_Aktuell()

Debug "Aktuelles_Jahr$    = " + Aktuelles_Jahr$
Debug "Aktuelles_Jahr     = " + Aktuelles_Jahr
Debug "Aktuelles_Monat$   = " + Aktuelles_Monat$
Debug "Aktuelles_Monat_Nr = " + Aktuelles_Monat_Nr
Debug "Aktuelles_Tag$     = " + Aktuelles_Tag$
Debug "Aktuelles_Tag_Nr$  = " + Aktuelles_Tag_Nr$
Was mir aber fehlt ist die Anzahl der Tage eines Monates, ählich

AnzahlTage = GiveDayOfMont(Date(JJahr,MMonat,TTag, 0, 0, 0))

Gibt es dafür Unterstützung vom System her?


Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten