Seite 1 von 2

Kalender Monat in Klartext vom Sytem

Verfasst: 31.12.2019 09:24
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!

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 31.12.2019 12:23
von HeX0R
Da steht doch alles!
Setze einfach ST entsprechend.

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 15:06
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!

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 16:27
von HeX0R
:freak:

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 18:24
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!

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 19:35
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

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 20:05
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")

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 20:19
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")

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 02.01.2020 20:21
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.

Re: Kalender Monat in Klartext vom Sytem

Verfasst: 03.01.2020 09:14
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!