Анализ даты и времени в формате US ‘ошибка’, возвращает мне формат, отличный от американского

#c# #string #parsing #datetime #format

#c# #строка #синтаксический анализ #дата и время #формат

Вопрос:

У меня проблема с синтаксическим анализом строки в формате DateTime в формате US. Хотя я предоставляю строку в формате ММ / дд / гггг, она продолжает возвращать мне дату и время в формате дд / ММ / гггг, и я перепробовал все из приведенных ниже.

 string[] formats = { "MM/dd/yyyy hh:mm:ss", "MM/dd/yyyy" };
DateTime dateTime;
var ex = DateTime.TryParseExact("12/29/1989", formats, provider, DateTimeStyles.None, out dateTime);
 

И приведенное выше вернет мне дату и время как «29/12/1989»;

Я тоже пробовал:

 var dt = DateTime.Parse("12/29/1989", System.Globalization.CultureInfo.GetCultureInfo("en-US"));
 

в основном я перепробовал все опции анализа даты и времени, и все они возвращают мне формат, отличный от американского.

Я живу в Великобритании, и локаль моей машины — en-UK.

Комментарии:

1. Итак, вы хотите показать дату в определенном формате, пока синтаксический анализ в порядке?

2. Что provider именно у вас? Похоже, он отличается en-US от, и именно поэтому ваши DateTime строковые представления отличаются.

3. Что вы имеете в it keeps returning me the DateTime in format of dd/MM/yyyy виду?

4. Я хотел бы преобразовать любую дату переменной строки формата MM / dd / yyy в DateTime. Например, я хочу преобразовать строку «22.10.2014» в DateTime, сохранив форматирование в США, но происходит то, что синтаксический анализ работает только потому, что порядок форматирования изменился, а дата «22/10/2014», поэтому формат изменился на дд / ММ / гггг.

5. Поставщик CultureInfo = CultureInfo.GetCultureInfo(«en-US»);

Ответ №1:

все возвращают мне не американский формат

Нет, они возвращают вам DateTime значение. DateTime Значение не имеет формата. Это просто дата и время. Когда вы захотите преобразовать это обратно в строку, он будет использовать формат по умолчанию для вашего текущего языка, если вы не скажете иначе.

Важно различать данные, хранящиеся в значении (дата и время), и строковые представления этого значения.

Чтобы привести аналогичный пример, каким бы вы ожидали результат этого кода?

 int x = Convert.ToInt32("FF", 16);
Console.WriteLine(x);
 

Вы ожидаете «255» или «FF»? Это 255, потому что формат по умолчанию для преобразования an int в строку — десятичный. Не имеет значения, что значение изначально было проанализировано из шестнадцатеричного — это не часть значения. Примените ту же самую логику к DateTime .

Комментарии:

1. Спасибо, Джон, это ответ — недостаток знаний с моей стороны.