Question Conversion d'une chaîne en DateTime


Comment convertir une chaîne telle que 2009-05-08 14:40:52,531 dans une DateTime?


421
2018-05-28 05:01


origine


Réponses:


Étant donné que vous gérez une heure sur 24 heures et que vous avez une virgule séparant la fraction des secondes, je vous recommande de spécifier un format personnalisé:

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);

584
2018-05-28 05:14



Vous avez essentiellement deux options pour cela. DateTime.Parse() et DateTime.ParseExact().

Le premier est très tolérant en termes de syntaxe et va analyser les dates dans de nombreux formats différents. C'est bon pour l'entrée d'utilisateur qui peut venir dans différents formats.

ParseExact vous permettra de spécifier le format exact de votre chaîne de date à utiliser pour l'analyse. Il est bon de l'utiliser si votre chaîne est toujours dans le même format. De cette façon, vous pouvez facilement détecter les écarts par rapport aux données attendues.

Vous pouvez analyser l'entrée de l'utilisateur comme ceci:

DateTime enteredDate = DateTime.Parse(enteredString);

Si vous avez un format spécifique pour la chaîne, vous devez utiliser l'autre méthode:

DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);

"d" représente le modèle de date courte (voir MSDN pour plus d'informations) et null spécifie que la culture en cours doit être utilisée pour analyser la chaîne.


187
2018-05-28 05:12



essaye ça

DateTime myDate = DateTime.Parse(dateString);

un meilleur moyen serait ceci:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}

92
2018-05-28 05:03



Personne ne semble avoir mis en œuvre une méthode d'extension. Avec l'aide de Réponse de @ CMS:

Voici un exemple de travail complet et amélioré: Lien Gist

namespace ExtensionMethods {
    using System;
    using System.Globalization;

    public static class DateTimeExtensions {
        public static DateTime ToDateTime(this string s, 
                  string format = "ddMMyyyy", string cultureString = "tr-TR") {
            try {
                var r = DateTime.ParseExact(
                    s: s,
                    format: format,
                    provider: CultureInfo.GetCultureInfo(cultureString));
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }
        }

        public static DateTime ToDateTime(this string s, 
                    string format, CultureInfo culture) {
            try {
                var r = DateTime.ParseExact(s: s, format: format, 
                                        provider: culture);
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }

        }

    }
}

namespace SO {
    using ExtensionMethods;
    using System;
    using System.Globalization;

    class Program {
        static void Main(string[] args) {
            var mydate = "29021996";
            var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}

            mydate = "2016 3";
            date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}

            mydate = "2016 12";
            date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}

            mydate = "2016/31/05 13:33";
            date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}

            mydate = "2016/31 Ocak";
            date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}

            mydate = "2016/31 January";
            date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); 
            // {31.01.2016 00:00:00}

            mydate = "11/شعبان/1437";
            date = mydate.ToDateTime(
                culture: CultureInfo.GetCultureInfo("ar-SA"),
                format: "dd/MMMM/yyyy"); 
         // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*

            System.Diagnostics.Debug.Assert(
               date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
        }
    }
}

23
2018-05-23 11:55



Essayez ci-dessous, où strDate est votre date au format 'MM / jj / aaaa'

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))

18
2017-11-07 06:04



Convert.ToDateTime ou DateTime.Parse


16
2018-05-28 05:03



string input;
DateTime db;
Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): ");
input = Console.ReadLine();
db = Convert.ToDateTime(input);

//////// this methods convert string value to datetime
///////// in order to print date

Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day);

14
2017-09-18 11:41



Vous pouvez également utiliser DateTime.TryParseExact () comme ci-dessous si vous n'êtes pas sûr de la valeur d'entrée.

DateTime outputDateTimeValue;
if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue))
{
    return outputDateTimeValue;
}
else
{
    // Handle the fact that parse did not succeed
}

14
2018-04-14 13:07



J'ai essayé plusieurs façons. Ce qui a fonctionné pour moi était ceci:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data pour moi, c'était des moments comme ça 9/24/2017 9:31:34


8
2018-03-18 23:03