7 votes

Conversion de date et d'heure en C# - DateTime.ParseExact() ne fonctionne pas comme prévu

J'ai le format date/heure, par exemple : "1-Mar-13 92230" D'après ce document et ce lien le format est le suivant : "d-MMM-yy Hmmss", parce que :

Day is single digit, 1-30
Month is 3 letter abbreviation, Jan/Mar etc.
Year is 2 digits, eg 12/13
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09)
Minute is standard (eg 01, 52)
Second is standard (eg 30, 02)

J'essaie d'exécuter le code suivant dans mon programme, mais je continue à obtenir une erreur de "String was not recognized as a valid DateTime".

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture);

Aidez-moi, je ne suis pas très familier avec les conversions DateTime, mais je ne vois pas où je me suis trompé. Merci.

UPDATE : Est-ce parce que le temps ne peut pas être analysé sans les deux points entre les deux ? (par exemple, 1-Mar-13 9:22:30 est analysé, mais j'ai une source de données externe qui serait impossible à réécrire de Hmmss en H:mm:ss).

5voto

xanatos Points 30513

Vous pourriez fixer votre date :

var parts = "1-Mar-13 92230".Split(' ');

if (parts[1].Length == 5)
{
    parts[1] = "0" + parts[1];
}

var newDate = parts[0] + " " + parts[1];

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss",  System.Globalization.CultureInfo.CurrentCulture);

3voto

Alberto Points 5865

De msdn :

Si le format est un modèle de format personnalisé qui n'inclut pas la date ou l'heure. séparateurs de date ou d'heure (tels que "yyyyMMdd HHmm"), utilisez la culture invariante pour le paramètre fournisseur et la forme la plus large de chaque spécificateur de format personnalisé. personnalisé. Par exemple, si vous souhaitez spécifier des heures dans le modèle de format spécifiez la forme la plus large, "HH", au lieu de la forme la plus étroite, "H".

pour que vous puissiez essayer :

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture);

1voto

Anand Points 5385

Votre chaîne d'entrée doit avoir le format suivant

string input = "1-Mar-13 092330";

Si vous retournez à votre lien, il est dit que

H   24-hour clock hour (e.g. 19)

Si ce n'est pas le cas, imaginez comment traiter le cas des heures supérieures à 9, c'est-à-dire celles qui sont à deux chiffres.

Sinon, l'heure, les minutes et les secondes doivent être séparées.

string input = "1-Mar-13 9 2330";

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture);

0voto

Vinay Pratap Singh Points 5151

Vos heures, minutes et secondes doivent être séparées, car elles ne sont pas distinguées.

string input = "1-Mar-13 9 23 30";
        var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss",   System.Globalization.CultureInfo.CurrentCulture);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X