Я бы посоветовал вам выполнить синтаксический анализ DateTimeOffset
вместо DateTime
, , как рекомендуется в MSDN, при использовании спецификатора смещения часового пояса в строке формата:
using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string text = "11/23/2011 23:59:59 UTC +0800";
string pattern = "MM/dd/yyyy HH:mm:ss 'UTC' zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact
(text, pattern, CultureInfo.InvariantCulture);
Console.WriteLine(dto);
}
}
Затем вы можете преобразовать это значение в DateTime
в UTC, если хотите, но не существует такой вещи, как «DateTime
со смещением 8 часов» - DateTime
считается либо универсальным, локальным или не указано, причем некуда сохранить конкретное смещение.
DateTime
является любопытным типом различными способами и может вызвать проблемы у неосторожного разработчика.