Как объединить две строки (дату и время) в одну дату 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(..).