Code: Select all
EnableASM
; --------------------------------------------
; Format PB Date (no time) thru Win API (ASM)
; with localized day and month names (opt)
; --------------------------------------------
; Tokens in mask$ (case sensitive!)
; yyyy yy Year (4/2 digits)
; MM M Month, numeric (with/without leading zero)
; MMMM MMM Month by name (long/short)
; dd d Day (with/without leading zero)
; dddd ddd Day of week (long/short)
#DateBaseHigh = 27111902
#DateBaseLow = -717324288
Procedure.s FormatDateX(mask$,date_)
ft_.FILETIME : fs_.SYSTEMTIME
MOV Eax,date_
MOV Ebx,10000000
MUL Ebx
ADD Eax,#DateBaseLow
ADC Edx,#DateBaseHigh
MOV ft_\dwLowDateTime,Eax
MOV ft_\dwHighDateTime,Edx
FileTimeToSystemTime_(ft_,fs_)
buf.s = Space(64)
GetDateFormat_(#LOCALE_USER_DEFAULT,0,td,mask$,buf,64)
ProcedureReturn buf
EndProcedure
; test
Debug FormatDateX("dddd, d.MMMM yyyy",Date())
Debug FormatDateX("M/d/yyyy",Date())
Code: Select all
EnableASM
Procedure.s FormatDateX(mask$,date_)
fs_.SYSTEMTIME
fs_\wYear = Year(date_)
fs_\wMonth = Month(date_)
fs_\wDay = Day(date_)
fs_\wDayOfWeek = DayOfWeek(date_)
buf.s = Space(64)
GetDateFormat_(#LOCALE_USER_DEFAULT,0,td,mask$,buf,64)
ProcedureReturn buf
EndProcedure