2009-03-06 9 views
0

J'ai eu des problèmes avec les dates. Je dois avoir une instance DateTime qui a le format "jj-MM-aaaa". Je ne demande pas d'avoir une chaîne de mon instance de date dans le "jj-MM-aaaa", que je connais.Date Problèmes de format de culture

je dois semer ma date obj dans le cadre d'entité, qui appelle une procédure stockée qui reçoit un param que une date ...

Je peux toujours modifier ma procédure stockée pour recevoir un Varchar au lieu de date , mais je veux la sécurité du type.

Le code suivant peut vous aider à comprendre le problème:

Dim s1 As String = CurrentUICulture.ToString() 'pt-PT 
Dim s2 As String = CurrentCulture.ToString()'pt-PT 
Dim odate As Date = DateTime.ParseExact(sdate, CurrentUICulture.DateTimeFormat.ShortDatePattern, CurrentUICulture) 'sdate = 19/03/2009 
'CurrentUICulture = pt-PT - ShortDatePattern = "dd-MM-yyyy" 
'odate is 03/19/2009 !!! 

Convert.ToDateTime(sdate, CurrentUICulture) 
'its the same! 

AIDE!

+0

s'il vous plaît votre code en retrait, il est donc plus facile à lire ... –

Répondre

0

Problème résolu ... car il n'y avait pas de problème en premier lieu !

La chose est que j'utilise une fonction qui est quelque chose comme ça, j'ai eu une date invalide

GetFormatedDate(ByVal sdate As String) As Date 

et ... si le sdate est rien (ou nul) quand il a atteint la procédure stockée SQL.

ValueTypes n'ont rien a une valeur ... mais il est possible de le faire:

GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date) 

avec que je ne reçois une exception param invalide.

ouais!

1

DateTimes n'a pas de format. Ce ne sont pas non plus des instances, puisque DateTime est un type de valeur.

Il me semble que vous pensez que le DateTime est 'incorrectement formaté' (vous prétendez qu'il est 19/03/2009). Comment avez-vous vérifié la valeur de odate? En l'imprimant comme odate.ToString(), ou en vérifiant sa valeur dans une fenêtre de débogueur? Essayez l'imprimer avec:

Debug.Print odate.ToString(_ 
    Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _ 
    Globalization.CultureInfo.CurrentUICulture) 

Odate est juste un DateTime - il contient le nombre de secondes depuis une date depuis longtemps (qui je ne peux pas être pris la peine de se rappeler en ce moment). Il n'a pas d'informations de formatage et sera donc formaté en sortie.

Le fait que la date soit le 19/03/2009 signifie que votre analyse a réussi. 19/03/2009 est seulement le 19 mars 2009 (le 3ème du 19ème mois n'est pas une date valide). Alors arrêtez de vous inquiéter et continuez ;-)

+0

« Il me semble que vous le DateTime est « mal formaté »(» Je ne pense pas ... Je sais! Je suis arrivé Par ailleurs: "Constructeur DateTime (Int32, Int32, Int32, Int32, Int32, Int32, Calendrier) Initialise une nouvelle instance de la structure DateTime – Txugo

+0

à l'année, mois, jour, heure, minute, et Et il a des informations de formatage et j'ai besoin de lui si je n'ai pas une exception de débordement de retour de sql srv Donc, si vous n'êtes pas intelligent pour répondre ni même pour sous-estimer la question. ..not botter à écrire. – Txugo

0

Chaque fois que vous traitez des dates et SQL Server (que je suppose que vous êtes ici aussi), je vous recommande d'utiliser le format ISO-8601 - il devrait fonctionner quelle que soit votre langue, votre culture ou d'autres paramètres. ISO-8601 définit le format de date comme étant: AAAA-MM-JJ (avec ou sans les tirets, AAAAMMJJ est également acceptable).

Est-ce que cela fonctionne?

Dim oDate as Date = DateTime.Parse("2009-03-06") 

pour une date du 6 Mars 2009.

Voir aussi: http://www.w3.org/TR/NOTE-datetime

et: http://www.cl.cam.ac.uk/~mgk25/iso-time.html