У меня проблемы с преобразованием строки в формат «гггг-ММ-ддЗ» с помощью VB.net.
Например, у меня есть строка «2007-10-21Z».
При использовании CDate или TryParse получается 20.10.2007, а не 21.10.2007.
Я не понимаю, как Z влияет на строку даты, поэтому при ее анализе получается день раньше.
Насколько я понимаю, Z указывает нулевой часовой пояс. Но в строке даты нет информации о времени. Как это работает?





Вау, это интересно. Я пробую в C# DateTime.Parse ("2008-10-31"). ToString (); и результат: «30.10.2008 17:00:00».
Не могу дождаться ответа!
Неужто вы хотели ввести DateTime.Parse ("2008-10-31Z")? (Буква "Z" отсутствует в вашем сообщении). В противном случае ваш результат не имеет смысла.
Добавление «Z» к дате указывает, что время универсальное глобальное время. Когда вы CDate из TryParse дату, она преобразует ее в местное время.
Он интерпретирует дату как полночь по зулусскому времени (GMT), а затем конвертирует ее обратно в ваш местный часовой пояс. Если вы находитесь в Штатах, это будет с 15:00 до 19:00 в предыдущий день.
Пытаться
DateTime.ParseExact ("2007-10-21Z", "yyyy-MM-ddZ", CultureInfo.InvariantCulture);
Я почти уверен, что CUltureInfo.InvariantCulture - это ключ.
Спасибо. Я не только узнал, почему дата стала датой раньше, но и как сделать так, чтобы дата была без сдвига часового пояса.