Проблема разбора DateTime (DateTime.ParseExact) - PullRequest
1 голос
/ 14 декабря 2010

[Пожалуйста, проголосуйте, чтобы закрыть это - см. Мой последний комментарий.]

Привет,

Примерно так:

DateTime.ParseExact("25/12/2008 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

работаетнормально на моей машине разработки, но не после развертывания (сервер).

Я думаю, это связано с некоторой настройкой часового пояса.Я пытался:

<%@ ... UICulture="en" Culture="en-US" %> 

безрезультатно.Любые предложения на открытку, пожалуйста.Спасибо.

Кристиан

PS: Исключение:

Строка не была распознана как действительный DateTime

PPS: Я обновил вопрос.Я на самом деле кормить время бит.извините за это!

PPPS: теперь я понял, что все это связано с Excel и oledb.Строка 25/12/2008 выглядит так: «25.12.2008 12:00:00 AM» на сервере и как «25/12/2008 00:00:00» на компьютере разработчика.Я отрегулировал часовой пояс сервера в Великобритании безрезультатно.Что еще я могу сделать?Спасибо и извините за все это замешательство !!!

Ответы [ 3 ]

5 голосов
/ 14 декабря 2010

Что-то вроде этого

Вы бы лучше отправили точно , что не удалось, и точную ошибку, а не "что-то вроде", что не удалось.

Я ожидаю, что ваш пример выдаст исключение FormatException, поскольку преобразуемая вами строка («25/12/2008», без времени) не соответствует указанному формату («дд / мм / гггг чч: мм:ss ").

Также немного странно использовать hh вместо HH в вашем формате - hh - это 12-часовые часы.

Я ожидаю, что сработает любое из следующего.

// No time component
DateTime.ParseExact("25/12/2008", "dd/MM/yyyy", new CultureInfo("en-US"));

// Works for hours <=12, result is always AM
DateTime.ParseExact("25/12/2008 11:00:00", "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-US"));

// Works for hours using 24-hour clock
DateTime.ParseExact("25/12/2008 13:00:00", "dd/MM/yyyy HH:mm:ss", new CultureInfo("en-US"));
3 голосов
/ 23 июля 2014

При разборе строки на DateTime всегда учитывайте, что дата может иметь одну или две цифры для дня и месяца. Например, это может быть ММ / дд / гггг или М / д / гггг или ММ / д / гггг или М / дд / гггг. Если вы используете ParseExact и не учитываете это, вы получите исключение. Попробуйте это:

DateTime date = DateTime.ParseExact(
    dateText, // date in string 
    new string[] { "M/d/yyyy", "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, // formats (you can add more)
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None);
1 голос
/ 14 декабря 2010

попробуй

DateTime.ParseExact("25/12/2008", "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...