Een string converteren naar DateTime

Hoe converteer je een string zoals 2009-05-08 14:40:52,531naar een DateTime?


Antwoord 1, autoriteit 100%

Aangezien u de 24-uurs tijd hanteert en u een komma hebt die de secondenfractie scheidt, raad ik u aan een aangepast formaat op te geven:

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

Antwoord 2, autoriteit 34%

Hiervoor heb je in principe twee opties. DateTime.Parse()en DateTime.ParseExact().

De eerste is erg vergevingsgezind in termen van syntaxis en zal datums in veel verschillende formaten ontleden. Het is goed voor gebruikersinvoer die in verschillende formaten kan komen.

Met ParseExact kunt u het exacte formaat van uw datumstring specificeren die u voor het parseren wilt gebruiken. Het is goed om dit te gebruiken als je string altijd in hetzelfde formaat is. Op deze manier kunt u eventuele afwijkingen van de verwachte gegevens gemakkelijk detecteren.

U kunt gebruikersinvoer als volgt ontleden:

DateTime enteredDate = DateTime.Parse(enteredString);

Als u een specifiek formaat voor de tekenreeks heeft, moet u de andere methode gebruiken:

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

"d"staat voor het korte datumpatroon (zie MSDN voor meer info) en nullspecificeert dat de huidige cultuur moet worden gebruikt voor het ontleden van de string.


Antwoord 3, autoriteit 18%

probeer dit

DateTime myDate = DateTime.Parse(dateString);

een betere manier zou dit zijn:

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

Antwoord 4, autoriteit 6%

Gebruik DateTime.Parse(string):

DateTime dateTime = DateTime.Parse(dateTimeStr);

Antwoord 5, autoriteit 3%

Niemand lijkt een uitbreidingsmethode te hebben geïmplementeerd. Met behulp van @CMS’s antwoord:

Een werkend en verbeterd voorbeeld van volledige bron vindt u hier: 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)));
        }
    }
}

Antwoord 6, Autoriteit 3%

Ik heb verschillende manieren geprobeerd. Wat voor mij werkte, was dit:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

datavoor mij was tijden zoals deze 24/24/2017 9:31:34 AM


Antwoord 7, Autoriteit 3%

Probeer het onderstaande, waar Strdate uw date is in ‘MM / DD / YYYY’ -indeling

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

Antwoord 8, Autoriteit 2%

convert.todatetime of DateTime.parse


Antwoord 9, Autoriteit 2%

datetime.parse

syntaxis:

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

Voorbeeld:

string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
  • Waarde: string-weergave van datum en tijd.
  • provider: object dat cultuurspecifieke informatie verstrekt.
  • Stijlen: Opmaakopties die de string-parsing aanpassen voor een of andere datum- en tijdmedewerkingsmethoden. Toezicht, waarschuwing is bijvoorbeeld een waarde die helpt bij het negeren van alle spaties die in de reeks aanwezig zijn tijdens het parseren.

Het is ook de moeite waard om datetime te onthouden, is een object dat is opgeslagen als nummer intern in het kader, het formaat is alleen van toepassing wanneer u het terugbrengst naar de reeks.

  • Het parseren van een string naar het interne nummertype converteren.

  • Formatteren omzetten van de interne numerieke waarde naar een leesbaar
    string.

Ik heb onlangs een probleem gehad waarin ik probeerde een datetime te converteren om door te geven aan Linq wat ik op dat moment niet had gerealiseerd, is irrelevant tijdens het passeren van datetime naar een Linq-query.

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

Volledige datetime Documentatie


Antwoord 10, Autoriteit 2%

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

Antwoord 11, Autoriteit 2%

U kunt DATETIME.TRYPARSEXACT () zoals hieronder kunnen gebruiken als u niet zeker bent van de ingangswaarde.

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
}

Antwoord 12

Ik heb net een elegante manier gevonden:

Convert.ChangeType("2020-12-31", typeof(DateTime));
Convert.ChangeType("2020/12/31", typeof(DateTime));
Convert.ChangeType("2020-01-01 16:00:30", typeof(DateTime));
Convert.ChangeType("2020/12/31 16:00:30", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("en-GB"));
Convert.ChangeType("11/شعبان/1437", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("ar-SA"));
Convert.ChangeType("2020-02-11T16:54:51.466+03:00", typeof(DateTime)); // format: "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz"

Antwoord 13

Plaats deze code in een statische klasse > 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();
   }
}

Op deze manier kunt u

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('-', ':', '-');

Antwoord 14

String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);

deze geeft je

2019-08-17 11:14:49.000

Antwoord 15

Verschillende culturen in de wereld schrijven datumreeksen op verschillende manieren. In de VS is 20 januari 2008 bijvoorbeeld 20 januari 2008. In Frankrijk wordt hierdoor een InvalidFormatException gegenereerd. Dit komt omdat Frankrijk datum-tijden leest als Dag/Maand/Jaar, en in de VS is dit Maand/Dag/Jaar.

Als gevolg daarvan zal een string zoals 20/01/2008 in Frankrijk worden geparseerd naar 20 januari 2008 en vervolgens een InvalidFormatException genereren in de VS.

Om uw huidige cultuurinstellingen te bepalen, kunt u System.Globalization.CultureInfo.CurrentCulture gebruiken.

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

Antwoord 16

Wil je het snel?

Stel dat je een datum hebt met de notatie jjMMdd.

De snelste manier om het te converteren die ik heb gevonden is:

var d = new DateTime(
(s[0] - '0') * 10 + s[1] - '0' + 2000, 
(s[2] - '0') * 10 + s[3] - '0', 
(s[4] - '0') * 10 + s[5] - '0')

Kies de indexen op basis van het gewenste datumformaat. Als je snelheid nodig hebt, vind je de ‘niet-generieke’ manier van de functie waarschijnlijk niet erg.

Deze methode neemt ongeveer 10% van de tijd in beslag die nodig is voor:

var d = DateTime.ParseExact(s, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);

Other episodes