Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проблема с преобразованием даты по Гринвичу в местное время с помощью С#?

Автор вопроса: Pentium10Ответов: 1

У нас есть приложение для Windows Mobile, написанное на C# (compact framework). Региональные настройки установлены на (английский) Новая Зеландия. Часовой пояс установлен на GMT+12 Новая Зеландия.

Мы храним наши даты в формате GMT/UTC. У нас есть дата 2010-02-18 18:00:00 по UTC

На этот раз в Новой Зеландии 7:00 утра.

Когда мы вызываем объект datetime

starttime = starttime.ToLocalTime();

мы получаем 9:00 утра.
Что мы делаем неправильно?

  • Вы убедились, что starttime действительно находится по Гринвичу? Zach Johnson 20.02.2010
  • Если ваш часовой пояс GMT+12, должно ли 18.00 часов привести к 6.00 часам следующего дня? Ни 7.00, ни 9.00 не являются правильным ответом. (в замешательстве...) Treb 20.02.2010
  • @Treb: Думаю, в середине февраля в Новой Зеландии летнее время. Странный... Remus Rusanu 20.02.2010
  • @Treb Я тоже запутался, я не знаю, как правильно преобразовать дату UTC в местное время. Параметр GMT+12 New Zealand доступен в раскрывающемся списке в настройках времени устройства Windows Mobile. Pentium10 20.02.2010
  • @ Зак, я убедился, что это действительно по Гринвичу. Для моего местного часового пояса работает отлично, у нас проблемы с Новой Зеландией. Pentium10 20.02.2010
  • @Pentium 10, @Remus Rusanu: Думаю, Ремус на правильном пути. В северном полушарии у нас зима (действительно, я вижу снег, когда смотрю в окно ;-), но в южном полушарии сейчас лето, так что летнее время или летнее время, скорее всего, являются причиной моей отключения на одну ошибку. Treb 20.02.2010

datetimetimezonewindows-mobilecompact-framework

Ответы

Ответ 1 · рейтинг 3 · Tim C

Вы указали "вид" на этой дате и времени? Что-то вроде этого:

DateTime parsedStartTime = DateTime.SpecifyKind(
    DateTime.Parse(starttime),
    DateTimeKind.Utc);

DateTime localStartTime = parsedStartTime.DateToLocalTime();

Это может помочь, поскольку он может не знать, что дата и время, которые у вас есть сейчас, имеют тип Utc (вероятно, он не указан).

Если это не поможет, возможно, вам поможет часть вашего кода, показывающая, как вы устанавливаете время запуска.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы