Как объединить две строки (дату и время) в одну дату DateTime
У меня две строки:
string one = "13/02/09";
string two = "2:35:10 PM";
Я хочу объединить эти два вместе и преобразовать в DateTime
.
Я пробовал следующее, но он не работает:
DateTime dt = Convert.ToDateTime(one + " " + two);
DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy HH:mm:ss tt", CultureInfo.InvariantCulture);
Что я могу сделать, чтобы сделать эту работу?
Ответы
Ответ 1
Попробуйте это:
string one = "13/02/09";
string two = "2:35:10 PM";
DateTime dt = Convert.ToDateTime(one + " " + two);
DateTime dt1 = DateTime.ParseExact(one + " " + two, "dd/MM/yy h:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine(dt1);
Вот DEMO.
HH с использованием 24-часовых часов от 00
до 23
. Например; 1:45:30 AM -> 01
и 1:45:30 PM -> 13
h, используя 12-часовые часы от 1 до 12. Например; 1:45:30 AM -> 1
и 1:45:30 PM -> 1
Ознакомьтесь с дополнительной информацией Пользовательские строки формата даты и времени
Ответ 2
Ваша проблема связана с вашим спецификатором часа; вы хотите h
(час, используя 12-часовые часы от 1 до 12), а не HH
(час, используя 24-часовой такт от 00 до 23).
Ответ 3
Попробуйте использовать информацию о культуре, которая соответствует формату DateTime
для ваших строковых значений:
DateTime dt = Convert.ToDateTime(one + " " + two,
CultureInfo.GetCultureInfo("ro-RO"));
или изменить входную строку так, чтобы час имел 2 цифры:
string one = "13/02/09";
string two = "02:35:10 PM";
DateTime dt1 = DateTime.ParseExact(one + " " + two,
"dd/MM/yy HH:mm:ss tt",
CultureInfo.InvariantCulture);
Ответ 4
Проблема в том, что указанная вами строка формата неверна.
'HH' означает двузначный час, но у вас есть час с цифрой.
Вместо этого используйте "h".
Таким образом, полный формат: 'dd/MM/yy h: mm: ss tt'
Ответ 5
используйте DateTime.Parse() для разбора даты и времени отдельно. Затем добавьте компонент времени второго к первому, например,
var date = DateTime.Parse (one);
var time = DateTime.Parse (two);
var result = date + time - time.Date;
Ответ 6
Используйте string two = "02:35:10 PM";
вместо string two = "2:35:10 PM";
, а также hh
вместо hh
из-за формата AM/PM.
Ниже приведен код:
string one = "13/02/09";
string two = "02:35:10 PM";
DateTime dateTime = DateTime.ParseExact(one + " " + two, "dd/MM/yy hh:mm:ss tt", CultureInfo.InvariantCulture);
Ответ 7
Следующий код будет делать то, что вы хотите. Я использовал британскую культуру, чтобы позаботиться о структуре d/m/y вашей даты:
string string1 = "13/2/09";
string string2 = "2:35:10 PM";
DateTime combined = DateTime.Parse(string1 + ' ' + string2, new CultureInfo("UK"));
Ответ 8
Convert.ToDateTime
использует DateTime.ParseExact
с вашей текущей культурой потока, поэтому вы можете сделать что-то более понятным, просто сделав:
string date = "13/02/09";
string time = "2:35:10 PM";
DateTime dateTime = DateTime.Parse(date +" "+ time, new CultureInfo("en-GB"));
Console.WriteLine (dateTime);
Это дает результат 13/02/2009 14:35:10
и заставляет синтаксис использовать временные форматы даты en-GB. Если ваша установка Windows является en-GB в любом случае, вам не нужен аргумент CultureInfo(..)
.