Преобразование местного времени в UTC

я немного потерялся в часовом поясе 🙂

У меня есть данные, хранящиеся со временем в UTC. Сервер находится в Нидерландах, поэтому мы живем в utc + 1 (теперь, при дневном свете, в utc + 2)

Теперь клиент говорит: дайте мне данные с 5 августа.

Поэтому я должен вычислить время utc из «своего времени». Для этого я должен знать:

каково ваше смещение utc (мы сохранили это в своем профиле, скажем, utc -6), вы находитесь в timelighttimetime (потому что тогда нам нужно добавить +1 и сделать смещение utc -5)

Тогда мои вопросы:

  1. Могу ли я спросить структуру .Net: имеет ли страна XX дневное время?

  2. Могу ли я спросить .Net framework: есть 08-05-2010T00: 00: 00 в стране XXX дневной свет в это время?

Я пытаюсь использовать .ToLocalTime (), но это только дает мне локальное время на сервере, и это не то, что я хочу, я хочу рассчитать с часовым поясом пользователя, а также с тем, что при этом момент времени, если он / она находится в дневном свете

Я также видел этот пример VB:

TimeZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time") Dim Dated As DateTime = TimeZoneInfo.ConvertTimeToUtc(TempDate, TimeZone) 

но imho это не учитывает, что пользователь в этом часовом поясе находится или не находится в стране с дневным освещением (dst). Например, один пользователь в этом часовом поясе находится в нидерландах, имеющих dst, а другой находится в другой стране, у которой нет dst.

Вы не можете задавать frameworks об определенной стране, но можете спросить о конкретном часовом поясе .

TimeZoneInfo учитывает DST. (Черт, у него не было IsDaylightSavingTime метода IsDaylightSavingTime .) Если у вас есть два пользователя, один из которых в настоящее время наблюдает за DST, а другой – нет, то они не находятся в одном и том же часовом поясе.

Если бы вы могли указать, в каких местах вы говорите, я могу попытаться выяснить, какие часовые пояса задействованы. (Как правило, проще узнать имена Олсона, но не всегда можно найти идентификаторы Windows.)

Класс TimeZone имеет метод IsDaylightSavingTime, который принимает дату как параметр и возвращает логическое значение, указывающее, включена ли эта дата во время дневной подсветки для этого часового пояса.

Я продвигаю свой комментарий к ответу. Это сложная проблема. Посмотрите http://www.timeanddate.com/time/dst2010.html , есть таблица DST в разных странах мира. Вы не можете получить это со статическим кодом, потому что DST меняются не только из страны в страну, но и из года в год.

Думаю, вам нужно вести таблицу с информацией о ДСТ и получать от нее информацию.

Или вы можете запросить веб-сервис, чтобы получить такую ​​информацию.

Посмотрите http://www.earthtools.org/webservices.htm#timezone для веб- сервиса, который вы можете запросить, чтобы получить время в разных странах, которые принимают во внимание DST (он работает только для часовых поясов Западной Европы). Также посмотрите http://www.geonames.org/export/web-services.html . Вы должны использовать геолокацию пользователей для использования этих сервисов.