var dateString = "23/12/2019 06:30:00";
DateTime dt = DateTime.ParseExact(recordDateString.Trim(), "dd/MM/yyyy HH:mm:ss", new CultureInfo("fr-FR"));
Я ожидаю этот вывод: 23/12/2019 06:30:00 Но значение объекта dt: 23.12.2019 18:30
Где здесь ошибка?
Примечание. Код написан на .net core 2.2.
Я использую Visual Studio 2019, я вижу этот выходной режим отладки, когда мой проект запускается локально.
Таким образом, ваша Visual Studio использует культуру, в которой дата представлена вам таким образом. Вам не о чем беспокоиться, просто так работают свидания. Внутри они представляют собой просто числа, и когда вам нужно показать дату, в игру вступает инструмент, который «форматирует» эти числа для отображения даты в соответствии с культурой текущей машины. (Или любая другая культура, если вы укажете требуемую культуру)
И поскольку даты являются внутренними числами, вы можете вычесть дату из другой даты, вернув TimeSpan, просто написав TimeSpan ts = dt1 - dt2;
Большое спасибо @Steve, хотя формат объекта datetime dt1 MM/dd/yyyy и формат объекта dt2 dd/MM/yyyy, результат dt1-dt2 правильный.
Иметь ввиду. Даты не имеют формата! Это инструменты, которые отображают дату, которая форматирует число во что-то, что вы интерпретируете как дату.
Ваша переменная dt
содержит то, что вы ожидаете — 23 декабря 2019 года. Но когда вы ее печатаете, она, вероятно, печатается с локалью en-US, которая использует MM/dd/yyyy. Тип DateTime
хранит только фактическое значение времени, а не локаль (поэтому он как бы забывает, что вы проанализировали его из fr-FR), его можно проанализировать из любой локали и распечатать в любой другой локали. Попробуйте dt.ToString(new CultureInfo("fr-FR"))
.
dt.ToString(new CultureInfo("fr-FR")) возвращает строку, но мне нужен объект datetime с дд/мм/гггг. На самом деле я хочу сделать вычитание между двумя объектами даты. Один из этих форматов MM/dd/yyyy, другой формат объекта даты dd/MM/yyyy @fejesjoco
«но мне нужен объект даты и времени» -> это то, что у вас есть в переменной dt «с дд / мм / гггг» -> это имеет значение только при преобразовании даты в строку
Где вы смотрите на этот вывод? Какие инструменты вы используете, чтобы увидеть это? Какая строка кода производит этот вывод?