Преобразование из строки в дату C # [дубликат]

В вашем правиле перезаписи отсутствует флаг R (перенаправление), как указано @hakre в комментариях в ответе @ Ричарда. Но вам также необходимо включить флаг NE (без выхода), иначе знак фунта будет переведен в %23, который не работает должным образом.

RewriteRule ^page/six /page.php#six [R,NE,QSA,L]
432
задан cramopy 13 May 2015 в 19:17
поделиться

12 ответов

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

DateTime dateTime= DateTime.Parse(dateTimeStr);
8
ответ дан Amir Twito 15 August 2018 в 15:39
поделиться
16
ответ дан Bharat Gupta 15 August 2018 в 15:39
поделиться

Никто не реализует метод расширения. С помощью ответа @ CMS :

Работающий и улучшенный полный исходный пример приведен здесь: 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
ответ дан Community 15 August 2018 в 15:39
поделиться

Вы также можете использовать 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
}
14
ответ дан dev.bv 15 August 2018 в 15:39
поделиться
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
ответ дан Edwin de Koning 15 August 2018 в 15:39
поделиться
  • 1
    Вы пропустили часть времени? Мне нужна и дата, и дата; время, Как я могу это сделать? – Maximus 29 September 2014 в 17:04

попробуйте это

DateTime myDate = DateTime.Parse(dateString);

, лучшим способом было бы это:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}
93
ответ дан gehsekky 15 August 2018 в 15:39
поделиться

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

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);
590
ответ дан kame 15 August 2018 в 15:39
поделиться
  • 1
    Хорошие глаза. Я не видел запятую в OP. – lc. 28 May 2009 в 08:09
  • 2
    (Я думаю, вы хотели использовать запятую в строках даты и формата, правда?) – lc. 28 May 2009 в 08:10
  • 3
    Отредактировано ... Да, вот что я имел в виду ... – CMS 28 May 2009 в 08:58
  • 4
    Это только запятая из-за установки OPs European Locale, что, если вы возьмете этот код на другой сервер с US.Locale, то фракции раздела будут десятичными, а не запятыми на сохраненной строке, и ваше решение будет ломать. Перед тем, как применить правильный синтаксический анализатор, добавьте проверку типа входящей строки даты и времени для ее правильной локали. Я удивлен, что Microsoft еще не имеет этого предварительного кода в другом месте в CLR или C # .net – hamish 25 August 2014 в 00:54
  • 5
    Я копирую этот пример, и у меня есть функциональная ошибка, потому что сегодня 08 мая: D LOL Спасибо большое CMS! – Leandro Tupone 9 May 2016 в 22:30

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

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
18
ответ дан Krishna 15 August 2018 в 15:39
поделиться
  • 1
    Никто не упомянул, что он работает только с этим конкретным форматом. – T.Todua 18 September 2017 в 16:02

Поместите этот код в статический класс > 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();
   }
}

Таким образом, вы можете использовать

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('-', ':', '-');
1
ответ дан M.R.T2017 15 August 2018 в 15:39
поделиться

Различные культуры в мире записывают строки строк по-разному. Например, в США 01/20/2008 - 20 января 2008 года. Во Франции это вызовет InvalidFormatException. Это потому, что Франция читает дату-день как день / месяц / год, а в США - месяц / день / год.

Следовательно, строка, подобная 20/01/2008, будет анализироваться до 20 января, 2008 во Франции, а затем выбросить InvalidFormatException в США.

Чтобы определить текущие настройки культуры, вы можете использовать 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 15 August 2018 в 15:39
поделиться

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

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

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

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

DateTime enteredDate = DateTime.Parse(enteredString);

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

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

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

187
ответ дан Sander 15 August 2018 в 15:39
поделиться

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

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data для меня было время как это 9/24/2017 9:31:34 AM

8
ответ дан zeilja 15 August 2018 в 15:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: