Универсальное время - это не формат - это, по сути, часовой пояс.Непонятно, что вы пытаетесь сделать, но преобразование «локального» * 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
с помощью явной строки формата
Теперь, если какая-либо отдельная операция вызывает проблему, вы можете ее легче выделить.