web-dev-qa-db-fra.com

Format de date/heure Problème: la chaîne n'a pas été reconnue comme un DateTime valide

Je veux formater la chaîne d'entrée en MM/JJ/AAAA hh: mm: ss format en C #.
La chaîne d'entrée est au format MM/dd/yyyy hh:mm:ss
Par exemple: "04/30/2013 23:00"

J'ai essayé la fonction Convert.ToDateTime(), mais il considère 4 comme date et 3 comme mois, ce qui n'est pas ce que je veux. En fait, le mois est 04 et la date est 03.

J'ai essayé la fonction DateTime.ParseExact() également, mais en obtenant une exception.

Je reçois une erreur:

La chaîne n'a pas été reconnue comme un DateTime valide.

9
Priya

Votre chaîne de date et heure ne contient aucune seconde. Vous devez refléter cela dans votre format (supprimez le :ss).
En outre, vous devez spécifier H au lieu de h si vous utilisez des heures sur 24 heures: 

DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

Voir ici pour plus d'informations: 

Chaînes de format de date et heure personnalisées

13
Botz3000

Vous pouvez utiliser DateTime.ParseExact() method.

Convertit la représentation sous forme de chaîne spécifiée d'une date et d'une heure en son Équivalent DateTime en utilisant le format spécifié et spécifique à la culture informations de format. Le format de la représentation sous forme de chaîne doit correspondre. le format spécifié exactement.

DateTime date = DateTime.ParseExact("04/30/2013 23:00", 
                                    "MM/dd/yyyy HH:mm", 
                                    CultureInfo.InvariantCulture);

Voici une DEMO .

hh est pour l'horloge de 12 heures du 01 au 12, HH est pour l'horloge de 24 heures du 00 au 23.

Pour plus d'informations, consultez Custom Date and Time Format Strings

5
Soner Gönül

essaye ça:

string strTime = "04/30/2013 23:00";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "MM/dd/yyyy HH:mm",  
   System.Globalization.CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, out dtTime))
 {
    Console.WriteLine(dtTime);
 }
3
Arshad

changer la culture et essayer comme cela pourrait fonctionner pour vous 

string[] formats= { "MM/dd/yyyy HH:mm" }
var dateTime = DateTime.ParseExact("04/30/2013 23:00", 
     formats, new CultureInfo("en-US"), DateTimeStyles.None);

Vérifiez les détails: Méthode DateTime.ParseExact (String, String [], IFormatProvider, DateTimeStyles)

1
Pranay Rana
DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",  
                                           CultureInfo.InvariantCulture);

Notez l'utilisation de HH (horloge sur 24 heures) plutôt que de hh (horloge sur 12 heures) et l'utilisation de InvariantCulture car certaines cultures utilisent des séparateurs autres que le slash.

Par exemple, si la culture est de-DE, le format "jj/mm/aaaa" correspondrait à une période comme séparateur (31.01.2011).

0
Diorrini11

Le code ci-dessous a fonctionné pour moi:

string _stDate = Convert.ToDateTime(DateTime.Today.AddMonths(-12)).ToString("MM/dd/yyyy");
String format ="MM/dd/yyyy";
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
DateTime _Startdate = DateTime.ParseExact(_stDate, format, culture);
0
Anjan Kant