В C#
имеется множество методов для преобразования строк, содержащих дату и время во многих форматах, в единый объект DateTime
. Эти методы могут распознавать довольно много стандартных форматов даты и времени, и если ваши отличаются от них, вы даже можете предоставить свой собственный.
DateTime.Parse()
- преобразует строку в объект DateTime
. Если операция завершится неудачно, будет выдано исключение. DateTime.TryParse()
- Преобразует строку в DateTime
объект , только если это возможно . Возвращает true
в случае успеха и false
в случае неудачи. DateTime.TryParseExact()
- Преобразует строку в указанном формате в объект DateTime
. Возвращает true
в случае успеха и false
в противном случае.
В вашем случае вы можете использовать DateTime.TryParse()
(что рекомендуется вместо простого использования DateTime.Parse()
, если вы не абсолютно уверены в форматеправильно) вот так:
var dtStr1 = " 2019. 09. 23. 14:54:23";
var dtStr2 = "2019.09.23 14:54:23";
var dtStr3 = "2019-09-23 14:54:23";
DateTime.TryParse(dtStr1, out DateTime dt1);
DateTime.TryParse(dtStr2, out DateTime dt2);
DateTime.TryParse(dtStr3, out DateTime dt3);
После преобразования в объект DateTime
с ним больше не ассоциируется формат. Это structure
, и, следовательно, имеет только переменные-члены и методы. Таким образом, для расчета общего количества часов и т. Д. Вы можете использовать предоставленные методы.
Допустим, вы хотите рассчитать время между началом и окончанием рабочего дня. Вы можете преобразовать их в DateTime
объекты, а затем вычесть один из других, что даст вам TimeSpam
объект.
var dtStrStart = "2019.09.23 08:23:12";
var dtStrEnd = "2019.09.23 16:17:28";
DateTime.TryParse(dtStrStart, out DateTime dtStart);
DateTime.TryParse(dtStrEnd, out DateTime dtEnd);
var diff = dtEnd - dtStart;
Теперь объект TimeSpan
, который здесь равен diff
, будетдаст вам кучу свойств с разницей в часах, минутах и т. д.
TimeSpan.Days
, TimeSpan.Minutes
и т. д. даст вам время в днях, минутах и т. д.
Console.WriteLine(diff.Days);
Console.WriteLine(diff.Hours);
Console.WriteLine(diff.Minutes);
Console.WriteLine(diff.Seconds);
Console.WriteLine(diff.Milliseconds);
Вывод:
0
7
54
16
0
TimeSpan.TotalMinutes
и т. Д. Даст вам весь период времени в соответствующих единицах.
Console.WriteLine(diff.TotalDays);
Console.WriteLine(diff.TotalHours);
Console.WriteLine(diff.TotalMinutes);
Console.WriteLine(diff.TotalSeconds);
Console.WriteLine(diff.TotalMilliseconds);
Вывод:
0.329351851851852
7.90444444444444
474.266666666667
28456
28456000
И наоборот, когда вы храните данные в базе данных, вы должны сноваиспользуйте стандартный формат, например datetime
или datetime2
. Рекомендуется использовать datetime2
, подробнее здесь .