web-dev-qa-db-fra.com

Comment combiner deux chaînes (date et heure) en un seul DateTime

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?

12
user2082630

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

11
Soner Gönül

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 ).

3
Rawling

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);
2
Alex Filipovici

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'

1
Petar Ivanov

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;
1
Stephane Delcroix

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(..).

0
Chris S

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}

0
Divya Agrawal

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);
0
Ryszard Dżegan

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"));
0
Kesty