Как вы преобразовываете строку, такую как 2009-05-08 14:40:52,531
в DateTime
?
Преобразование строки в DateTime
Ответ 1
Поскольку вы обрабатываете 24-часовое время, и у вас есть запятая, разделяющая долю секунд, я рекомендую указать пользовательский формат:
DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
System.Globalization.CultureInfo.InvariantCulture);
Ответ 2
У вас есть в основном два варианта. DateTime.Parse()
и DateTime.ParseExact()
.
Первый очень прощает с точки зрения синтаксиса и будет анализировать даты во многих разных форматах. Он хорош для пользовательского ввода, который может быть в разных форматах.
ParseExact позволит вам указать точный формат вашей строки даты, который будет использоваться для синтаксического анализа. Хорошо использовать это, если ваша строка всегда в одном формате. Таким образом, вы можете легко обнаружить любые отклонения от ожидаемых данных.
Вы можете разобрать пользовательский ввод следующим образом:
DateTime enteredDate = DateTime.Parse(enteredString);
Если у вас есть определенный формат для строки, вы должны использовать другой метод:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
обозначает короткий шаблон даты (см. MSDN для получения дополнительной информации), а null
указывает, что следует использовать текущую культуру для разбора строки.
Ответ 3
попробуйте это
DateTime myDate = DateTime.Parse(dateString);
лучшим способом было бы следующее:
DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
// handle parse failure
}
Ответ 4
Кажется, никто не реализовал метод расширения. С помощью ответа @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)));
}
}
}
Ответ 5
использовать DateTime.Parse (строка)
DateTime dateTime= DateTime.Parse(dateTimeStr);
Ответ 6
Попробуйте ниже, где strDate - это дата в формате "MM/dd/yyyy"
var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
Ответ 7
Ответ 8
Я пробовал разные способы. Что сработало для меня, так это:
Convert.ToDateTime(data, CultureInfo.InvariantCulture);
data
для меня было такое время 24.09.2017 9:31:34
Ответ 9
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);
Ответ 10
Вы также можете использовать 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
}
Ответ 11
DateTime.Parse
Синтаксис:
DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)
Пример:
string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
- Значение: строковое представление даты и времени.
- Поставщик: объект, предоставляющий информацию о культуре.
- Стили: параметры форматирования, которые настраивают разбор строк для некоторых методов анализа даты и времени. Например, AllowWhiteSpaces - это значение, которое помогает игнорировать все пробелы, присутствующие в строке, при ее разборе.
Также стоит помнить, что DateTime - это объект, который хранится как номер внутри структуры. Формат применяется к нему только при преобразовании его обратно в строку.
Разбор преобразования строки во внутренний тип числа.
Форматирование, преобразование внутреннего числового значения в читаемое строка.
Недавно у меня возникла проблема, когда я пытался преобразовать DateTime для передачи в Linq, но в то время я не понимал, что формат не имеет значения при передаче DateTime в запрос Linq.
DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
Ответ 12
Поместите этот код в статический класс> 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('-', ':', '-');
Ответ 13
Различные культуры мира записывают строки строк по-разному. Например, в США 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);
Ответ 14
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);
этот дает вам
2019-08-17 11:14:49.000