web-dev-qa-db-fra.com

Conversion d'une chaîne en date et heure

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

532
dban

Étant donné que vous traitez une heure basée sur 24 heures et que vous avez une virgule séparant la fraction de 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);
702
CMS

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

Le premier est très indulgent en termes de syntaxe et analysera les dates dans de nombreux formats différents. C'est bon pour une entrée 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 au même format. De cette façon, vous pouvez facilement détecter tout écart par rapport aux données attendues.

Vous pouvez analyser les entrées utilisateur comme ceci:

DateTime enteredDate = DateTime.Parse(enteredString);

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

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

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

231
Sander

essaye ça

DateTime myDate = DateTime.Parse(dateString);

une meilleure façon serait la suivante:

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

utiliser DateTime.Parse (chaîne)

DateTime dateTime= DateTime.Parse(dateTimeStr);
25
Amir Twito

Personne ne semble avoir implémenté une méthode d'extension. Avec l'aide de réponse de @ CMS :

Voici un exemple complet de sources complètes de travail et améliorées: Gist Link

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)));
        }
    }
}
25
guneysus

Essayez ce qui suit, où strDate est votre date au format 'MM/jj/aaaa'

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

J'ai essayé de différentes manières. Ce qui a fonctionné pour moi a été ceci:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data pour moi a été des moments comme celui-ci 24/09/2017 09:31:34

17
zeilja
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);
15
Umair Baig

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
dev.bv

DateTime.Parse

Syntaxe:

DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)

Exemple:

string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
  • Valeur: représentation sous forme de chaîne de la date et de l'heure.
  • Fournisseur: objet qui fournit des informations spécifiques à la culture.
  • Styles: options de formatage permettant de personnaliser l'analyse des chaînes pour certaines méthodes d'analyse de la date et de l'heure. Par exemple, AllowWhiteSpaces est une valeur qui permet d'ignorer tous les espaces présents dans la chaîne lors de l'analyse.

Il convient également de rappeler que DateTime est un objet stocké sous forme de numéro en interne dans la structure, le format ne lui étant applicable que lorsque vous le reconvertissez en chaîne.

  • Analyse de la conversion d'une chaîne en type de numéro interne.

  • Formater la conversion de la valeur numérique interne en une chaîne lisible.

J'ai récemment eu un problème où j'essayais de convertir un DateTime pour le transmettre à Linq. Ce que je n'avais pas réalisé à l'époque, c'est que le format n'a aucune pertinence lorsque je passe DateTime à une requête Linq.

DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);

Documentation DateTime complète

10
Mr.B

Mettez ce code dans une classe statique> public static class ClassName{ }

public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
{
   try
   {
      datetime = datetime.Trim();
      datetime = datetime.Replace("  ", " ");
      string[] body = datetime.Split(' ');
      string[] date = body[0].Split(dateSpliter);
      int year = date[0].ToInt();
      int month = date[1].ToInt();
      int day = date[2].ToInt();
      int hour = 0, minute = 0, second = 0, millisecond = 0;
      if (body.Length == 2)
      {
         string[] tpart = body[1].Split(millisecondSpliter);
         string[] time = tpart[0].Split(timeSpliter);
         hour = time[0].ToInt();
         minute = time[1].ToInt();
         if (time.Length == 3) second = time[2].ToInt();
         if (tpart.Length == 2) millisecond = tpart[1].ToInt();
      }
      return new DateTime(year, month, day, hour, minute, second, millisecond);
   }
   catch
   {
      return new DateTime();
   }
}

De cette façon, vous pouvez utiliser

string datetime = "2009-05-08 14:40:52,531";
DateTime dt0 = datetime.TToDateTime();

DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
DateTime dt5 = "2009-05-08".ToDateTime();
DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
2
M.R.T2017

Différentes cultures dans le monde écrivent des chaînes de date de différentes manières. Par exemple, aux États-Unis, le 20/01/2008 sera le 20 janvier 2008. En France, une exception InvalidFormatException sera lancée. En effet, la France lit les dates/heures en tant que jour/mois/année et, aux États-Unis, mois/jour/année.

Par conséquent, une chaîne telle que 20/01/2008 sera analysée jusqu'au 20 janvier 2008 en France, puis jettera une exception InvalidFormatException aux États-Unis.

Pour déterminer vos paramètres de culture actuels, vous pouvez utiliser System.Globalization.CultureInfo.CurrentCulture.

string dateTime = "01/08/2008 14:50:50.42";  
        DateTime dt = Convert.ToDateTime(dateTime);  
        Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",  
                          dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);  
1
Saeed Dini
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);

celui-ci vous donne

2019-08-17 11:14:49.000
0
Abdulhakim Zeinu