FormatDateEx()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

FormatDateEx()

Message par Flype »

Une petite procédure très simple et facile à modifier
pour formater une date - et afficher le jour et le mois en toutes lettres.

Code : Tout sélectionner

ProcedureDLL.s FormatDateEx(mask.s, date.l)
  
  Protected days.s   = "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi"
  Protected months.s = "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre"
  
  mask = ReplaceString(mask, "%day",   StringField(days, DayOfWeek(date) + 1, ","))
  mask = ReplaceString(mask, "%month", StringField(months, Month(date), ","))
  
  ProcedureReturn FormatDate(mask, date)
  
EndProcedure

Debug FormatDateEx("Le %dd.%mm.%yyyy %hh:%ii:%ss", Date())
Debug FormatDateEx("Le %day %dd %month %yyyy à %hh:%ii:%ss", Date())

Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

p'tite maj:

Code : Tout sélectionner

ProcedureDLL.s FormatDateFR(mask.s, date.l)
  ProcedureReturn FormatDate(ReplaceString(ReplaceString(mask,"%jour",StringField("Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi",DayOfWeek(date)+1,",")),"%mois",StringField("Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre",Month(date),",")),date)
EndProcedure

Debug FormatDateFR("Le %dd.%mm.%yyyy %hh:%ii:%ss", Date())
Debug FormatDateFR("Le %jour %dd %mois %yyyy à %hh:%ii:%ss", Date()) 
Debug FormatDateFR("Le %jour %dd %mois %yyyy à %hh:%ii:%ss", Date(2006,12,24,23,59,59)) 
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Très sympa! merci :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Voici plusieurs solutions pour étendre la fonction FormatDate() vers un FormatDate() localisé.

Code : Tout sélectionner

; Ce source propose 3 solutions pour PureBasic 4.02.
; 
; %dd   -> 01
; %ddd  -> Lun.
; %dddd -> Lundi
; %mm   -> 01
; %mmm  -> Jan.
; %mmmm -> Janvier

Import "kernel32.lib"
  GetCalendarInfoA(lcID.l, calID.l, calType.l, *lpCalData, cchData.l, *lpValue)
EndImport

Procedure.s GetCalendarInfo(type.l) ; Windows 98 et plus.
  Protected result.s = Space(64)
  If GetCalendarInfoA(#LOCALE_USER_DEFAULT, #CAL_GREGORIAN, type, @result, 64, 0)
    ProcedureReturn UCase(Left(result, 1)) + Right(result, Len(result) - 1)
  EndIf
EndProcedure

Procedure.s GetDateFormat(mask.s, date.l) ; Windows 95 et plus.
  Protected st.SYSTEMTIME, result.s = Space(64)
  st\wDay   = Day  (date)
  st\wMonth = Month(date)
  st\wYear  = Year (date)
  If GetDateFormat_(#LOCALE_USER_DEFAULT, 0, @st, mask, @result, 64) 
    ProcedureReturn UCase(Left(result, 1)) + Right(result, Len(result) - 1)
  EndIf
EndProcedure

Procedure.s FormatDate1(mask.s, date.l) ; Version FR - Cross-Platform.
  mask = ReplaceString(mask, "%dddd", StringField("Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi", DayOfWeek(date) + 1, ",")) 
  mask = ReplaceString(mask, "%ddd",  StringField("Dim.,Lun.,Mar.,Mer.,Jeu.,Ven.,Sam.",                  DayOfWeek(date) + 1, ","))
  mask = ReplaceString(mask, "%mmmm", StringField("Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", Month(date), ","))
  mask = ReplaceString(mask, "%mmm",  StringField("Janv.,Févr.,Mars,Avr.,Mai,Juin,Juil.,Août,Sept.,Oct.,Nov.,Déc.",                       Month(date), ","))
  ProcedureReturn FormatDate(mask, date)
EndProcedure

Procedure.s FormatDate2(mask.s, date.l) ; Windows 95 - Localisation via GetDateFormat()
  mask = ReplaceString(mask, "%dddd", GetDateFormat("dddd", date))
  mask = ReplaceString(mask, "%ddd",  GetDateFormat("ddd",  date))
  mask = ReplaceString(mask, "%mmmm", GetDateFormat("MMMM", date))
  mask = ReplaceString(mask, "%mmm",  GetDateFormat("MMM",  date))
  ProcedureReturn FormatDate(mask, date)
EndProcedure

Procedure.s FormatDate3(mask.s, date.l) ; Windows 98 - Localisation via GetCalendarInfo()
  mask = ReplaceString(mask, "%dddd", GetCalendarInfo(#CAL_SDAYNAME1         + DayOfWeek(date) - 1))
  mask = ReplaceString(mask, "%ddd",  GetCalendarInfo(#CAL_SABBREVDAYNAME1   + DayOfWeek(date) - 1))
  mask = ReplaceString(mask, "%mmmm", GetCalendarInfo(#CAL_SMONTHNAME1       + Month(date)     - 1))
  mask = ReplaceString(mask, "%mmm",  GetCalendarInfo(#CAL_SABBREVMONTHNAME1 + Month(date)     - 1))
  ProcedureReturn FormatDate(mask, date)
EndProcedure

Debug FormatDate1("%ddd %dd %mmm %yyyy  %hh:%ii:%ss", Date())
Debug FormatDate2("%ddd %dd %mmm %yyyy  %hh:%ii:%ss", Date())
Debug FormatDate3("%ddd %dd %mmm %yyyy  %hh:%ii:%ss", Date())

Debug FormatDate1("%dddd %dd %mmmm %yyyy  %hh:%ii:%ss", Date())
Debug FormatDate2("%dddd %dd %mmmm %yyyy  %hh:%ii:%ss", Date())
Debug FormatDate3("%dddd %dd %mmmm %yyyy  %hh:%ii:%ss", Date())
Image
Répondre