2010-06-17 3 views
2

У меня есть .NET WebService (написанный на C#), который должен обслуживать людей по всему миру.
С каждым запросом я получаю дату и время пользователя в своем часовом поясе с форматом: yyyy/MM/dd HH:mm ZZZZ.
Мне нужно преобразовать строку в нечто представляющее оригинал дату и время и указание часового пояса в регионе GMT. Я должен сделать некоторые логические вычисления и сохранить их в базе данных.Как представить дату и время разных часовых поясов в C#

Обычная DateTime doe не поддерживает это. он не имеет свойства, указывающего часовой пояс. Когда я пытаюсь преобразовать свою строку в DateTime, она просто преобразует ее в мое местное время.

Кто-нибудь знает класс C#, который обрабатывает это?

ответ

3

Вы можете проанализировать его с помощью DateTimeOffset. Например:

using System; 

class Program { 
    static void Main(string[] args) { 
     var s = "2009/01/10 17:18:44 -0800"; 
     var dto = DateTimeOffset.ParseExact(s, "yyyy/MM/dd HH:mm:ss zzzz", null); 
     var utc = dto.UtcDateTime; 
     Console.WriteLine(utc); 
     Console.ReadLine(); 
    } 
} 

Выход: 1/11/2009 1:18:44 AM

2

Неясно, означает ли ZZZZ просто смещение (которое не является полной информацией о часовом поясе) или имя часового пояса. Это важно, потому что смещение будет меняться со временем, как правило, из-за летнего времени.

Если это просто смещение, то DateTimeOffset из .NET 2.0SP1 будет охватывать все, что вам нужно (но вам нужно быть осторожным из-за неполной информации).

Если это имя часового пояса, TimeZoneInfo от .NET 3.5 может помочь вам - в зависимости от формата имени. Это использует имена Windows (например, «стандартное время по умолчанию») вместо более общих имен зонинфории (например, «Европа/Лондон»). Вам нужно будет хранить DateTime или (желательно) DateTimeOffset вместе с TimeZoneInfo.

В будущем Noda Time должен быть в состоянии сделать это для вас более легко - но он еще не готов к выпуску.

+0

Мне очень жаль, но я должен спросить некоторые more.If я получаю «2009/01/10 17: 18:44 -0800 «как его разобрать, чтобы получить информацию о часовом поясе и дату отдельно? мне нужно вырезать строку и разобрать ее самостоятельно или там встроены методы, которые справляются с этим? – Mohoch

+0

@Mohoch: Ганс дал вам код анализа, но вам нужно знать, что это * не * полная информация о часовом поясе. Это правильный сдвиг в этот момент времени. В тот же часовой пояс, вероятно, будет другое смещение в другое время года. –

+0

Спасибо, Джон. Меня не интересует смещение часового пояса местоположения, как раз в текущем смещении пользователя. Но я буду помнить об этом, если сфера изменений изменится. спасибо. – Mohoch

Смежные вопросы