J'ai deux cordes:
string one = "13/02/09";
string two = "2:35:10 PM";
Je veux combiner ces deux ensemble et convertir en une DateTime
.
J'ai essayé ce qui suit mais ça ne marche pas:
DateTime dt = Convert.ToDateTime(one + " " + two);
DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy HH:mm:ss tt", CultureInfo.InvariantCulture);
Que puis-je faire pour que cela fonctionne?
Essayez comme ça;
string one = "13/02/09";
string two = "2:35:10 PM";
DateTime dt = Convert.ToDateTime(one + " " + two);
DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy h:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine(dt1);
Voici une démo_.
HH avec une horloge de 24 heures du 00
au 23
. Par exemple; 1:45:30 AM -> 01
et 1:45:30 PM -> 13
h en utilisant une horloge de 12 heures de 1 à 12 heures. Par exemple; 1:45:30 AM -> 1
et 1:45:30 PM -> 1
Départ pour plus d'informationsChaînes de format de date et d'heure personnalisées
Votre problème concerne votre spécificateur d’heure; vous voulez h
( L’heure, avec une horloge de 12 heures allant de 1 à 12 ), pas HH
( l’heure, avec une horloge de 24 heures allant de 00 à 23 ).
Essayez d’utiliser une information de culture qui correspond au format DateTime
pour vos valeurs de chaîne:
DateTime dt = Convert.ToDateTime(one + " " + two,
CultureInfo.GetCultureInfo("ro-RO"));
ou modifiez la chaîne d'entrée pour que l'heure ait 2 chiffres:
string one = "13/02/09";
string two = "02:35:10 PM";
DateTime dt1 = DateTime.ParseExact(one + " " + two,
"dd/MM/yy HH:mm:ss tt",
CultureInfo.InvariantCulture);
Le problème est que la chaîne de format que vous spécifiez n'est pas correcte.
«HH» signifie une heure à deux chiffres, mais vous avez une heure à un chiffre.
Utilisez 'h' à la place.
Le format complet est donc 'jj/mm/aaa h: mm: ss tt'
utilisez DateTime.Parse () pour analyser séparément la date et l'heure. Ajoutez ensuite la composante heure du second au premier, comme ceci
var date = DateTime.Parse (one);
var time = DateTime.Parse (two);
var result = date + time - time.Date;
Convert.ToDateTime
utilise DateTime.ParseExact
avec la culture de votre thread actuel, vous pouvez donc clarifier les choses en effectuant simplement:
string date = "13/02/09";
string time = "2:35:10 PM";
DateTime dateTime = DateTime.Parse(date +" "+ time, new CultureInfo("en-GB"));
Console.WriteLine (dateTime);
Cela donne le résultat 13/02/2009 14:35:10
et force l'analyse à utiliser les formats d'heure en-GB. De toute façon, si votre installation Windows est en-GB, vous n'avez pas besoin de l'argument CultureInfo(..)
.
J'avais un format différent et la réponse ci-dessus n'a pas fonctionné:
string one = "2019-02-06";
string two = "18:30";
La solution pour ce format est:
DateTime newDateTime = Convert.ToDateTime(one).Add(TimeSpan.Parse(two));
Le résultat sera: newDateTime {06-02-2019 18:30:00}
Utilisez string two = "02:35:10 PM";
au lieu de string two = "2:35:10 PM";
et aussi hh
au lieu de HH
en raison du format AM/PM.
Ci-dessous le code:
string one = "13/02/09";
string two = "02:35:10 PM";
DateTime dateTime = DateTime.ParseExact(one + " " + two, "dd/MM/yy hh:mm:ss tt", CultureInfo.InvariantCulture);
Le code suivant fera ce que vous voulez. J'ai utilisé la culture britannique pour m'occuper de la structure d/m/a de votre date:
string string1 = "13/2/09";
string string2 = "2:35:10 PM";
DateTime combined = DateTime.Parse(string1 + ' ' + string2, new CultureInfo("UK"));