begin process at 2012 02 12 23:49:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

 > CONVERTIR UNE CHAÎNE EN DATE SELON UN FORMAT (UTILISATION DE "CULTURE")

CONVERTIR UNE CHAÎNE EN DATE SELON UN FORMAT (UTILISATION DE "CULTURE")


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date & Heure Source .NET ( DotNet ) Niveau :Débutant Date de création :29/07/2003 Date de mise à jour :12/05/2004 18:17:48 Vu :21 852

Auteur : Domilo

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Convertir une variable de type String contenant une date en une variable de type Date est quelque chose de simple avec la fonction CDate.
Sauf si le format de la date n'est pas en accord avec le format de l'environnement dans lequel tourne votre application.

Je m'explique :

Supposons que vous exécutiez CDate("01/02/03") dans une application
- Si l'utilisateur est en environnement "français" il obtiendra le 1ier Février 2003.
- Si l'utilisateur est en environnement "américain" il obtiendra le 2 Janvier 2003.

La fonction ci-jointe à été écrite pour enrichir CDate en lui passant le format de la date à traiter.

Dans notre exemple du "01/02/03", si nous avons "JJ/MM/AA", il faudra lui dire :
CDateFormat( "01/02/03", "dd/MM/yy" )

Dans le code, je craie un nouvel environnement de langue avec le format passé en paramètre. Là, la fonction CDate répond à mon besoin. (J'ai prie soin de sauver l'environnement pour le restaurer avant de sortir)

Ayant fait appel à Culture, il me fut simple d'étendre la fonction d'un troisième paramètre optionnel pour répondre à une conversion du type :
   CDateFormat("dimarts, 1 / juliol / 2003",, "ca-ES")

Le code contient en commentaire les liens vers les pages d'aide MS pour les formats et codes de culture.

Source

  • Imports System.Globalization
  • Imports System.Threading
  • (...)
  • Private Function CDateFormat(ByVal StrDate As String, _
  • Optional ByVal Format As String = "", _
  • Optional ByVal CultureCode As String = "") As Date
  • ' Transforme une chaine de caractères contenant une date valide
  • ' en une variable de type date...
  • '
  • ' Il faut donner le format correctement selon la norme (voir Format(...) )
  • ' et/ou le code culture.
  • '
  • '
  • ' Exemples :
  • ' CDateFormat("21:30:59 01/07/2003", "HH:mm:ss dd/MM/yyyy")
  • ' => #7/1/2003 9:30:59 PM#
  • ' ms-help://MS.VSCC/MS.MSDNVS.1036/cpref/html/frlrfsystemglobalizationdatetimeformatinfoclasstopic.htm
  • '
  • ' CDateFormat("1 juillet 2003",, "fr-FR")
  • ' ou CDateFormat("dimarts, 1 / juliol / 2003",, "ca-ES") (Catalan)
  • ' => #7/1/2003#
  • ' ms-help://MS.VSCC/MS.MSDNVS.1036/cpref/html/frlrfsystemglobalizationcultureinfoclasstopic.htm
  • '
  • ' Hélas "ddMMyyyy" ne semble pas fonctionner...
  • ' Si vous trouvez une parade simple merci de me la communiquer: mailto:dominique@millot.com
  • '
  • Dim culPreserve As CultureInfo = Thread.CurrentThread.CurrentCulture
  • Dim dRetour As Date
  • Try
  • Dim culTmp As New CultureInfo(CultureCode)
  • If Format <> "" Then
  • culTmp.DateTimeFormat.ShortDatePattern = Format
  • culTmp.DateTimeFormat.LongDatePattern = Format
  • End If
  • Thread.CurrentThread.CurrentCulture = culTmp
  • dRetour = CDate(StrDate)
  • Catch
  • Finally
  • Thread.CurrentThread.CurrentCulture = culPreserve
  • End Try
  • Return dRetour
  • End Function
Imports System.Globalization
Imports System.Threading

(...)

   Private Function CDateFormat(ByVal StrDate As String, _
                                 Optional ByVal Format As String = "", _
                                 Optional ByVal CultureCode As String = "") As Date
      ' Transforme une chaine de caractères contenant une date valide
      ' en une variable de type date...
      '
      ' Il faut donner le format correctement selon la norme (voir Format(...) )
      '  et/ou le code culture.
      '
      ' 
      ' Exemples :
      '           CDateFormat("21:30:59 01/07/2003", "HH:mm:ss dd/MM/yyyy")
      '              => #7/1/2003 9:30:59 PM#
      '                 ms-help://MS.VSCC/MS.MSDNVS.1036/cpref/html/frlrfsystemglobalizationdatetimeformatinfoclasstopic.htm
      '
      '           CDateFormat("1 juillet 2003",, "fr-FR")
      '        ou CDateFormat("dimarts, 1 / juliol / 2003",, "ca-ES")   (Catalan)
      '              => #7/1/2003#
      '                 ms-help://MS.VSCC/MS.MSDNVS.1036/cpref/html/frlrfsystemglobalizationcultureinfoclasstopic.htm
      '
      ' Hélas "ddMMyyyy" ne semble pas fonctionner...
      '       Si vous trouvez une parade simple merci de me la communiquer: mailto:dominique@millot.com
      '
      Dim culPreserve As CultureInfo = Thread.CurrentThread.CurrentCulture
      Dim dRetour As Date
      Try
         Dim culTmp As New CultureInfo(CultureCode)

         If Format <> "" Then
            culTmp.DateTimeFormat.ShortDatePattern = Format
            culTmp.DateTimeFormat.LongDatePattern = Format
         End If
         Thread.CurrentThread.CurrentCulture = culTmp
         dRetour = CDate(StrDate)
     Catch
      Finally
         Thread.CurrentThread.CurrentCulture = culPreserve
      End Try
      Return dRetour
   End Function

 Conclusion

Attention, tous les formats ne sont hélas pas acceptés.
Si quelqu'un trouve une astuce simple pour qu'il accepte par exemple "yyyyMMdd", qu'il me prévienne.
(Je pense qu'une solution "universelle" peut passer par l'usage de RegEx)

A+
Dom.


 Sources de la même categorie

Source avec Zip Source avec une capture LES FONCTIONS DATE PAR L'EXEMPLE. par pasquet78
Source avec Zip Source avec une capture CALENDRIER, MODE D'EMPLOI par pasquet78
Source avec Zip Source avec une capture Source .NET (Dotnet) HORLOGE DIODE AVEC 3 ALARMES ET REMISE À L'HEURE par EhJoe
Source avec Zip Source avec une capture POINTEUSE HORAIRES PAR SEMAINE par VBNoob13
Source avec Zip Source avec une capture HORLOGE À AIGUILLES SIMPLEMENT DANS UN USERFORM EXCEL par bigbe

Commentaires et avis

Commentaire de VBbigineure le 21/01/2004 12:07:37

je suis en proie à ce problème, si ça marche... je dresserais pour toi une stèle sous mon tapis à souris.

Commentaire de Dalida le 18/04/2006 12:51:36

salut,

je vous propose :

------------------
    ' format peut-être :
    ' d, D, f, F, g, G, t, T, u, U, m, r, s, y
    ' dd/MM/yyyy, etc.

    Public Function ConvertDate(ByVal dateToConvert As String, ByVal format As String) As String

        Try

            Return Date.Parse(dateToConvert).ToString(format)

        Catch
            Return String.Empty
        End Try

    End Function

    Public Function ConvertDate(ByVal dateToConvert As String, ByVal format As String, ByVal cultureName As String) As String

        Try

            Return Date.Parse(dateToConvert).ToString(format, New Globalization.CultureInfo(cultureName))

        Catch
            Return String.Empty
        End Try

    End Function
--------------

ce qui donne :
ConvertDate("13/03/1978", "D") ' --> lundi 13 mars 1978
ConvertDate("13/03/1978", "ddMMyyyy") ' --> 13031978
ConvertDate("13/03/1978", "D", "en-US") ' --> Monday, March 13, 1978

Commentaire de bruhmar le 17/12/2008 11:45:25 10/10

Très bon code.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales