2013-05-31 4 views
3

Учитывая две строки со следующими значениями:Регистрация даты и времени строки в DateTime

31/05/2013 0:00:00 
21:22 

Какой самый эффективный способ присоединиться к ним в тип DateTime данных, чтобы получить:

31/05/2013 21:22 

временная часть первой строки «0:00:00» игнорируется, в пользу использования «времени» из второй строки.

+0

С "ignored" вы имеете в виду, что может быть какая-либо ценность? –

+0

Да, это может быть любая ценность, например, «31/05/2013 12:34:12» вместо «31/05/2013 0:00:00» – user1624552

ответ

8

Использовать объект TimeSpan и DateTime.Add(yourTimeSpan); например.

DateTime dt = new DateTime(2013,05,31); 
var dts = dt.Add(new TimeSpan(0, 21, 22, 0, 0)); 

Продвинутый ответ, вы можете сначала проанализировать дату и время, например.

DateTime dt = DateTime.Parse("05/31/2013 0:00:00"); 
TimeSpan ts = TimeSpan.Parse("21:22"); 
var dts = dt.Add(ts); 

... имейте в виду, я не проверяю наличие плохих значений даты/времени. Если вы не уверены, являются ли значения настоящими датами/временем, используйте DateTime.TryParse и обработайте их соответствующим образом.

+3

Это примерная концепция - он может просто разобрать ее. –

+0

В качестве альтернативы он мог бы использовать 'operator + (DateTime s, TimeSpan t)' –

+0

DateTime.Parse/TryPrase тоже очень быстро.TryParse быстрее, чем улавливание исключений, которые будет вызывать Parse, если вы получите много ошибок синтаксического анализа (вот почему он существует). Это становится сложнее, если ваши даты не всегда в одном формате, но, надеюсь, они согласованы, и контекст глобализации может помочь вам там. В худшем случае вы можете использовать метод TryParseExact, но это намного медленнее, поскольку он должен анализировать ваше выражение, а затем анализировать дату. Тем не менее, он по-прежнему является пользовательским интерфейсом, если человек вводит эти строки. –

0

Говорят, что первая строка называется one, а второй называют two, просто сделать это:

DateTime result = DateTime.Parse(one).Date + DateTime.Parse(two).TimeOfDay; 
0
string strDate = "31/05/2013 0:00"; 
string strTime = "21:22"; 
strDate = strDate.Replace("0:00", strTime); 
DateTime date = Convert.ToDateTime(strDate); 
1

Как сказал @George, разобрать первое значение как DateTime, а затем еще один как TimeSpan, а затем добавьте TimeSpan к первому разобранному значению.

Другим вариантом является получение подстроки первых 10 символов первого значения и согласование с пространством со вторым значением и анализ его как DateTime.

0

Если вы начинаете с только строки, вы можете просто сделать это:

var dateString = "31/05/2013 00:00"; 
var timeString = "21:22"; 
var dateTimeString = dateString.Substring(0, 11) + timeString; 
var output = DateTime.ParseExact(dateTimeString, "dd/MM/yyyy HH:mm", null); 

Предполагая, что вы знаете, что этот формат не изменится (опасное предположение, конечно), это Работа. В противном случае вам придется разбирать строки даты и времени отдельно и использовать обычные манипуляции с датами, как это предлагалось другими. Например:

var ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB"); 
var dateString = "31/05/2013 00:00"; 
var timeString = "21:22"; 
var output = DateTime.Parse(dateString, ci) + TimeSpan.Parse(timeString, ci); 
0
DateTime date = DateTime.ParseExact("31/05/2013 0:00:00", "dd/MM/yyyy h:mm:ss", CultureInfo.InvariantCulture); 
    TimeSpan span = TimeSpan.ParseExact("21:22", "t", CultureInfo.InvariantCulture); 
    DateTime result = date + span; 
0

Если вы действительно имеем дело только с строк, то:

string strDate = "31/05/2013 0:00:00"; 
string strTime = "21:22"; 
string strDateTime = strDate.Split(' ')[0] + " " + strTime; 
0

Если вы можете смело предположить, что вы получаете 2 цифры месяц и день, 4-значный год и пробел после даты:

var date = "31/05/2013 0:00:00"; 
var time = "21:22"; 
var dateTime = DateTime.Parse(date.Substring(0,11) + time); 

Если предположения о вводе для mat не являются твердыми, вы можете использовать регулярное выражение для извлечения даты вместо Substring.

Смежные вопросы