Seite 1 von 1

ExDate Include - Datum als Double (Window)

Verfasst: 04.09.2007 17:33
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.

Verfasst: 04.09.2007 19:57
von NicTheQuick
Du Nachmacher! :wink:

Lustig! :mrgreen:
Da haben wir uns ja gut getroffen! Siehe hier. :allright:

Verfasst: 04.09.2007 20:49
von mk-soft
@NicTheQuick,

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

FF :wink: