2017-01-10 4 views
-1

Я нашел много блестящих решений по преобразованию строки времени в объект DateTime, а также преобразование строки даты в объект DateTime. То, что я не нашел, - это то, что происходит одновременно.Объединение строки времени и даты для создания единого объекта DateTime

Пример из двух струн:

1/10/2017

12:00 AM

Это моя попытка на него.

С #

var start = model.PublishDate; 
var time = model.PublishTime; 

if(time.Length == 7) 
{ 
    time = "0" + time; 
} 
var dateTimeString = start + " " + time; 

dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString, 
     new string[] { "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt", "M/dd/yyyy hh:mm:ss tt", "MM/d/yyyy hh:mm:ss tt" }, CultureInfo.InvariantCulture, DateTimeStyles.None); 

Однако он выдает сообщение об ошибке. Любые предложения были бы замечательными. Благодаря!

+2

У ошибки есть сообщение, связанное с этим. Какие слова? – Plutonix

+4

Возможно, вам нужно добавить пробел между начальными и временными строками – Steve

+3

Также кажется, что ваша временная переменная отрегулирована на длину 8 символов. Где часть tt требуется ParseExact? – Steve

ответ

2

Возможно, пусть каркас сделает для вас работу. Образец:

string dateString = "1/12/2017"; 
string timeString = "10:55:00 pm"; 

var d = DateTime.Parse(dateString).Date; 
var t = DateTime.Parse(timeString).TimeOfDay; 
DateTime sum = d.Add(t); 

Console.WriteLine(String.Format("{0}\r\n{1}\r\n{2:yyyy-MM-dd HH:mm:ss}", d, t, sum)); 
+0

Это выглядит очень многообещающим. Я постараюсь! Сообщите, если это работает – RyeGuy

+0

Это работало прекрасно. Спасибо!! – RyeGuy

3

После исправления недостающего пространства между двумя строками возникает другая проблема. Строка не содержит спецификации PM или AM, в то время как строки формата, предоставленные в DateTime.ParseExact, требуют наличия этих символов.

Вы можете удалить это требование из ваших форматов

string[] formats = new string[] 
{ 
    "M/d/yyyy hh:mm:ss", 
    "MM/dd/yyyy hh:mm:ss", 
    "M/dd/yyyy hh:mm:ss", 
    "MM/d/yyyy hh:mm:ss" 
}; 
dbSectionProps.PublishDate = DateTime.ParseExact(dateTimeString, 
    formats, CultureInfo.InvarianCulture, DateTimeStyles.None); 

Но это не будет работать, если время часть содержит часы, указанные в 0-23, потому что the format hh cannot work with values bigger than 12. Таким образом, вы должны изменить чч к Высочеству

EDIT
После просмотра последнего изменения, я думаю, что правильные форматы для строки

1/10/2017 12:00 AM 

будет без секундной спецификатора и с ТТ снова

string[] formats = new string[] 
{ 
    "M/d/yyyy hh:mm tt", 
    "MM/dd/yyyy hh:mm tt", 
    "M/dd/yyyy hh:mm tt", 
    "MM/d/yyyy hh:mm tt" 
}; 
+0

Я очень ценю понимание! Hh верен в моем случае, и я действительно надеялся включить двух буквенных символов. – RyeGuy

+0

Однако я собираюсь удалить символы и вставить свой пример в шахту и посмотреть, работает ли он. Еще раз спасибо!!! – RyeGuy

+1

Надеюсь, он работает. Пришло время уехать.Спокойной ночи – Steve

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