Изменить дату на Универсальный формат времени неверно меняет мою дату Я не могу получить ошибку - PullRequest
0 голосов
/ 08 августа 2011

Я пытаюсь просто изменить формат даты с датируемого на универсальный формат времени, но он неправильно форматирует его, как если бы у меня была дата на 7 августа, она изменила его на 8 августа после форматирования на универсальное время даты. Мой код для форматирования даты:

DateVar[runs] = DateTime.Parse(Convert.ToString(output.Tables[0].Rows[runs][0])).ToUniversalTime().ToString();

Не входите, чтобы кодировать его правильно и он является частью цикла, так что "run" - это цикл, а вывод - это набор данных, имеющий одну таблицу. У меня первые данные в таблице: "воскресенье, 7 августа 2011 г. 22:52 "и он был преобразован в" 8/8/2011 5:52:00 AM "после внедрения универсального формата времени.

Надежды на ваши предложения

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Универсальное время - это не формат - это, по сути, часовой пояс.Непонятно, что вы пытаетесь сделать, но преобразование «локального» * ​​1003 * в «универсальный» DateTime будет обычно менять время.Если вы не хотите, чтобы это происходило, не звоните ToUniversalTime.

Жаль, что API даты и времени .NET не так ясен, как могло бы быть - тип DateTimeсама по себе имеет некоторые ужасные двусмысленности об этом.Я пытаюсь улучшить ситуацию с моим проектом Noda Time , но вам нужно понять, что такое часовые пояса и т. Д.

Лично я бы предложил , а не используя просто DateTime.Parse или просто позвонив ToString, если вы не уверены, что формат по умолчанию - это то, что вам нужно.Я обычно звоню DateTime.ParseExact и указываю ожидаемый формат (и обычно CultureInfo.InvariantCulture, если это не введенная пользователем строка) - и аналогично я предоставляю строку формата для вызова ToString.

В вашем коде вывы просто конвертируете строку в строку - чего вы пытаетесь достичь?Если вы просто пытаетесь изменить формат (например, dd/MM/yyyyTHH:mm:ss), вам не нужно звонить ToUniversalTime, но вам do необходимо предоставить строку формата.

Я предлагаю вам разбить ваш код на несколько операторов, чтобы помочь вам отладить это (и для общей ясности кода):

  • Получить строку из DataTable, если вам действительно нужно (если она ужеDateTime, нет смысла преобразовывать ее в строку, а затем возвращать обратно)
  • Разобрать строку (опять же, при условии, что вам нужно)
  • Выполнить любые необходимые преобразования
  • Отформатируйте DateTime с помощью явной строки формата

Теперь, если какая-либо отдельная операция вызывает проблему, вы можете ее легче выделить.

1 голос
/ 08 августа 2011

Если я запускаю ToUniversalTime() из Greenwich, это даст то же самое время, но если я сделаю это, пока живу, где-то еще, он получит объект даты и времени со смещением + or - hours в зависимости от положения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...