begin process at 2010 02 10 01:21:12
  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 :18 840

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 Source .NET (Dotnet) FUSEAUX HORAIRES (HORLOGES ANALOGIQUES) par Blodox
Source avec Zip Source avec une capture ANNIVERSAIRE,FÊTES ET DICTONS par claude440
Source avec Zip Source avec une capture CALCULE HEURES DE NUIT 2 par ocejade
NUMÉRO DE SEMAINE par vb5zh
Source avec Zip HORLOGE À AIGUILLES (RADIAN) par brainbass

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 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,530 sec (3)

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