Преобразование строки в DateTime - PullRequest
522 голосов
/ 28 мая 2009

Как преобразовать строку, такую ​​как 2009-05-08 14:40:52,531, в DateTime?

Ответы [ 13 ]

690 голосов
/ 28 мая 2009

Поскольку вы работаете с 24-часовым временем и у вас есть запятая, разделяющая долю секунды, я рекомендую вам указать пользовательский формат:

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);
230 голосов
/ 28 мая 2009

У вас есть в основном два варианта для этого. DateTime.Parse() и DateTime.ParseExact().

Первое очень простое с точки зрения синтаксиса и будет анализировать даты во многих различных форматах. Это хорошо для пользовательского ввода, который может быть в разных форматах.

ParseExact позволит вам указать точный формат вашей строки даты, который будет использоваться для анализа. Это полезно, если ваша строка всегда в одном и том же формате. Таким образом, вы можете легко обнаружить любые отклонения от ожидаемых данных.

Вы можете анализировать ввод пользователя следующим образом:

DateTime enteredDate = DateTime.Parse(enteredString);

Если у вас есть определенный формат для строки, вы должны использовать другой метод:

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

"d" обозначает шаблон короткой даты (см. MSDN для получения дополнительной информации ), а null указывает, что текущая культура должна использоваться для анализа строки.

118 голосов
/ 28 мая 2009

попробуйте

DateTime myDate = DateTime.Parse(dateString);

лучше было бы так:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}
25 голосов
/ 23 мая 2015

Кажется, никто не реализовал метод расширения. С помощью @ CMS's answer :

Рабочий и улучшенный пример с полным исходным кодом находится здесь: 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)));
        }
    }
}
23 голосов
/ 21 ноября 2016

использовать DateTime.Parse (строка)

DateTime dateTime= DateTime.Parse(dateTimeStr);
20 голосов
/ 07 ноября 2014

Попробуйте ниже, где strDate - ваша дата в формате 'MM / dd / yyyy'

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
19 голосов
/ 28 мая 2009
15 голосов
/ 19 марта 2018

Я пробовал разные способы. Что сработало для меня, так это:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data для меня были такие времена 24.09.2017 9:31:34

15 голосов
/ 18 сентября 2011
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 голосов
/ 14 апреля 2015

Вы также можете использовать DateTime.TryParseExact (), как показано ниже, если вы не уверены во входном значении.

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...