ExDate Include - Datum als Double (Window)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

ExDate Include - Datum als Double (Window)

Beitrag von mk-soft »

Hi,

Manchmal reicht das Unix-Timeformat von PB nicht aus. Wird vielleicht mal ne LIB

Code: Alles auswählen

;-TOP
; Kommentar     : Datumsfunktionen in Type Date (Double)
; Author        : mk-soft
; Second Author : 
; Datei         : ExDate.pb
; Version       : 1.01
; Erstellt      : 04.09.2007
; Geändert      :
; 
; Compilermode  :
; OS-Version    : Windows
;
; ***************************************************************************************

#GeneralDate = 0
#LongDate = 1
#ShortDate = 2
#LongTime = 3
#ShortTime = 4

; ***************************************************************************************

Import "oleaut32.lib"
  VarBstrFromDate(a.d,b.l,c.l,d.l)
  VarFormatDateTime(a.l,b.l,c.l,d.l)
  VariantTimeToSystemTime(a.d,b.l)
EndImport

; ***************************************************************************************

Procedure.d ExDate(date.s = "")

  Protected lpSystemTime.systemtime, pvTime.d
  Protected date_uni.s
  
  If date = ""
    GetLocalTime_(lpSystemtime)
    SystemTimeToVariantTime_(lpSystemTime, @pvTime)
    ProcedureReturn pvTime
  Else
    date_uni.s = Space(Len(date) * 2)
    PokeS(@date_uni, date, -1, #PB_Unicode)
    If VarDateFromStr_(date_uni, 0, #LOCALE_NOUSEROVERRIDE, @pvTime) = #S_OK
      ProcedureReturn pvTime
    Else
      ProcedureReturn 0.0
    EndIf
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExDateToSystemTime(date.d, *lpSystemTime.systemtime)

  ProcedureReturn VariantTimeToSystemTime(date, *lpSystemTime)
  
EndProcedure

; ***************************************************************************************

Procedure.s ExDateStr(date.d)

  Protected *pbstrOut, result.s
  
  If VarBstrFromDate(date, 0, #LOCALE_NOUSEROVERRIDE, @*pbstrOut) = #S_OK
    result = PeekS(*pbstrOut, -1, #PB_Unicode)
    SysFreeString_(*pbstrOut)
  Else
    result = ""
  EndIf
  
  ProcedureReturn result
  
EndProcedure

; ***************************************************************************************

Procedure.s ExFormatDateStr(date.d, format.l)

  Protected pvarIn.variant
  Protected *pbstrOut, result.s
  
  pvarIn\vt = #VT_DATE
  pvarIn\dblVal = date
  If VarFormatDateTime(@pvarIn, format, 0, @*pbstrOut) = #S_OK
    result = PeekS(*pbstrOut, -1, #PB_Unicode)
    SysFreeString_(*pbstrOut)
  Else
    result = ""
  EndIf
  
  ProcedureReturn result
  
EndProcedure

; ***************************************************************************************

Procedure ExYear(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wYear
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExMonth(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wMonth
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExDayOfWeek(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wDayOfWeek
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExDay(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wDay
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExHour(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wHour
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExMinute(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wMinute
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure ExSecond(date.d)

  Protected lpSystemTime.systemtime
  
  If ExDateToSystemTime(date, lpSystemTime)
    ProcedureReturn lpSystemTime\wSecond
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

; ***************************************************************************************

#DTM_SETSYSTEMTIME  = $1002
#DTM_GETSYSTEMTIME  = $1001
#GDT_VALID          = $0000

; ***************************************************************************************

Procedure SetGadgetDate(gadget.l, date.d)

  Protected lpSystemTime.systemtime
  
  VariantTimeToSystemTime(date, lpSystemTime)
  ProcedureReturn SendMessage_(GadgetID(gadget),#DTM_SETSYSTEMTIME,#GDT_VALID,lpSystemtime)
  
EndProcedure

; ***************************************************************************************

Procedure.d GetGadgetDate(gadget.l)

  Protected lpSystemTime.systemtime, pvTime.d
  
  SendMessage_(GadgetID(gadget),#DTM_GETSYSTEMTIME,0,@lpSystemTime)
  If SystemTimeToVariantTime_(lpSystemTime, @pvTime)
    ProcedureReturn pvTime
  Else
    ProcedureReturn 0.0
  EndIf
  
EndProcedure

; ***************************************************************************************

FF :wink:

P.S. GetGadgetDate(Gadget) und SetGadgetDate(Gadget, Date.d) hinzufgefügt.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du Nachmacher! :wink:

Lustig! :mrgreen:
Da haben wir uns ja gut getroffen! Siehe hier. :allright:
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@NicTheQuick,

na denn.
Gleicher Ansatz, unterschiedliche Ausführung. Du warst aber eine Stunde schneller.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten