#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. Спасибо, Джон, это ответ — недостаток знаний с моей стороны.