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
; ***************************************************************************************
P.S. GetGadgetDate(Gadget) und SetGadgetDate(Gadget, Date.d) hinzufgefügt.