конвертировать время utc и смещение в DateTime - PullRequest
5 голосов
/ 29 июля 2010

у меня дата и время (в utc) сохранены в базе данных, и я также знаю смещение utc в следующем формате.

-03:00:00

как преобразовать это в DateTime

Ответы [ 2 ]

13 голосов
/ 29 июля 2010

Этот самый простой способ применить смещение к DateTime, которое у вас уже есть, - создать структуру TimeSpan, которая содержит значение вашего смещения, а затем просто «добавить» смещение к исходному DateTime значению.

Например:

DateTime utcDateTime = DateTime.Parse("29 July 2010 14:13:45");
TimeSpan offSet = TimeSpan.Parse("-03:00:00");
DateTime newDateTime = utcDateTime + offSet;
Console.WriteLine(newDateTime);

Это приводит к следующему выводу:

29/07/2010 11:13:45

исходное время (29 июля 2010 г. 14:13:45) минус 3 часа (смещение - -03: 00: 00).

Обратите внимание, что этот метод просто выполняет простую арифметику с вашим значением DateTime и не учитывает часовые пояса.

0 голосов
/ 30 мая 2011

Проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что большинство драйверов БД при извлечении из базы данных создают DateTime с DateTimeKind.Unspecified, который может неправильно преобразовываться в UTC, даже если вы используете ToUniversalTime. Чтобы обойти это, я использую метод расширения, подобный этому:

    public static DateTime ToSafeUniversalTime(this DateTime date) {
        if(date != DateTime.MinValue && date != DateTime.MaxValue) {
            switch(date.Kind) {
            case DateTimeKind.Unspecified:
                date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, DateTimeKind.Utc);
                break;
            case DateTimeKind.Local:
                date = date.ToUniversalTime();
                break;
            }
        }
        return date;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...