2010-12-14 30 views
0

[S'il vous plaît voter pour fermer cette - voir mon dernier commentaire.]problème parsing DateTime (DateTime.ParseExact)

Salut,

Quelque chose comme ceci:

DateTime.ParseExact("25/12/2008 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

fonctionne très bien sur ma machine de développement mais pas après le déploiement (serveur).

Je suppose qu'il s'agit d'une configuration de fuseau horaire. J'ai essayé:

<%@ ... UICulture="en" Culture="en-US" %> 

sans résultat. Toutes les suggestions sur une carte postale s'il vous plaît. Merci.

Christian

PS: Exception:

chaîne n'a pas été reconnu comme un DateTime valide

PPS: J'ai mis à jour la question. En fait, je nourris dans le temps. Désolé pour ça!

PPPS: J'ai maintenant réalisé que tout cela avait à voir avec Excel et oledb. La chaîne 25/12/2008 ressemble à ceci "12/25/2008 12:00:00 AM" sur le serveur et comme ceci "25/12/2008 00:00:00" sur la machine de développement. J'ai ajusté le fuseau horaire du serveur au RU sans avantage. Que puis-je faire d'autre? Merci et désolé pour toute cette confusion !!!

+1

De quelle manière cela ne fonctionne pas bien? Résultat inattendu? Exception? Rien? – LukeH

+1

Il est à noter que 25/12/2008 n'est pas un format de date valide pour en-US. Cela n'explique pas l'écart entre le local et le déployé, donc je vais le laisser comme commentaire. –

+1

Une exception FormatException avec "Chaîne n'a pas été reconnue comme un DateTime valide" serait le résultat attendu pour votre exemple.Le code qui "fonctionne bien sur votre machine de développement" n'est probablement pas le même que votre échantillon. – Joe

Répondre

4

Quelque chose comme ça

Vous feriez mieux de poster exactement ce qui a échoué, et l'erreur exacte, plutôt que "quelque chose comme" ce qui a échoué.

Je m'attendrais à ce que votre exemple donne une exception FormatException, puisque la chaîne que vous convertissez ("25/12/2008", pas de temps) ne correspond pas au format spécifié ("jj/MM/aaaa hh: mm: ss ").

Également un peu étrange d'utiliser hh plutôt que HH dans votre format - hh est une horloge de 12 heures.

Je m'attendrais à ce que l'une des solutions suivantes fonctionne.

// No time component 
DateTime.ParseExact("25/12/2008", "dd/MM/yyyy", new CultureInfo("en-US")); 

// Works for hours <=12, result is always AM 
DateTime.ParseExact("25/12/2008 11:00:00", "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-US")); 

// Works for hours using 24-hour clock 
DateTime.ParseExact("25/12/2008 13:00:00", "dd/MM/yyyy HH:mm:ss", new CultureInfo("en-US")); 
+0

J'ai ajouté un PS. J'ai trouvé le truc hh en utilisant google ... – cs0815

1

essayer

DateTime.ParseExact("25/12/2008", "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture); 
+0

Cela ne fonctionne pas mais est mieux que ce que je fais actuellement. – cs0815

+1

Comment est-il préférable que cela ne fonctionne pas? :) –

+0

Je veux dire le bit CultureInfo.InvariantCulture. – cs0815

3

Lorsque l'analyse d'une chaîne à DateTime, toujours considérer que la date pourrait avoir un ou deux chiffres pour le jour et le mois. Par exemple, il pourrait être MM/jj/aaaa ou M/j/aaaa ou MM/j/aaaa ou M/jj/aaaa. Si vous utilisez ParseExact et que vous ne le considérez pas, vous obtiendrez une exception. Essayez ceci:

DateTime date = DateTime.ParseExact(
    dateText, // date in string 
    new string[] { "M/d/yyyy", "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, // formats (you can add more) 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None);