2017-01-25 16 views
0

см. Мой код, который я использовал для конвертирования в Мексику даты и времени в UTC, дата и время.C# Как скопировать UTC date time в Мексику date time

string strDateTime = "25/01/2017 07:31:00 AM"; 
    DateTime localDateTime = DateTime.Parse(strDateTime); 
    DateTime univDateTime = localDateTime.ToUniversalTime(); 

ToUniversalTime возвращение UTC 25-01-2017 02:01:00

, когда я снова попытаться преобразовать ту же дату и время UTC UTC 25-01-2017 02:01:00 в Мексику по местному времени, то я получил 24-01-2017 06:01:00

так увидеть 07:31:00 AM becomes 06:01:00 что не является правильным. поэтому скажите мне, чего не хватает в моем коде, для которого я получаю неправильное местное время, когда я конвертирую из utc в Мексику, используя информацию о часовом поясе.

см. Мой код, который преобразуется из utc в местное время в Мексике, используя информацию о часовом поясе.

string strDateTime = "25-01-2017 02:01:00"; 
    DateTime utcDateTime = DateTime.Parse(strDateTime); 
    string nzTimeZoneKey = "Pacific Standard Time (Mexico)"; 
    TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone); 
+0

Можете ли вы проверить какой результат вы получаете, когда вы набираете 'TimeZoneInfo.Local'? –

+0

Отметим, что «Тихоокеанское стандартное время (Мексика)» - для северной части полуострова Баха-Калифорния. Города включают Тихуана и Мехикали, и это называется «Zona Noroeste» на испанском языке. Это * не * Мексика "Zona Pacifico". См. Статью [Время Википедии в Мексике] (https://en.wikipedia.org/wiki/Time_in_Mexico). Мексика имеет четыре часовых пояса, поэтому обязательно выберите правильный. –

+0

Также нет логической разницы между идентификаторами часовых поясов Windows «Стандартное тихоокеанское время (Мексика)» и «Тихий стандарт». Раньше считалось, что часть Мексики использовала даты перехода на летнее время в Мексике (вместо дат перехода в США), но это оказалось неверным, и данные были исправлены. Вся эта область согласована с переходами США на летнее время (а не с Мексикой). –

ответ

2

Хорошо, я не знаю, что вы находились в Индии - которая изменяет вещи немного:

Вы собираетесь хотеть использовать TimeZoneInfo.ConvertTime() API для этого один .. Может быть что-то как:

var dt = new DateTime(2017, 01, 25, 7, 31, 0).ToUniversalTime(); 
    var nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time (Mexico)"); 
    //var ist = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Utc, nzTimeZone); 
+0

если мой формат даты не так, тогда как синтаксис datetime может его проанализировать? – Mou

+0

Хорошо, если ваш код работает успешно, он разбирает его в порядке, но не так, как вы ожидаете. Пожалуйста, просмотрите форматы даты с [MSDN] (https://msdn.microsoft.com/en-us/library/az4se3k1 (v = vs.110) .aspx) - вы даже не увидите формат строки даты вы пытаетесь использовать –

+0

. Я выполняю ваш код, но все же я получаю неправильное время, которое составляет '06: 01: 00' вместо' 07: 31: 00'. если и как я могу загрузить снимок экрана моего экрана отладки VS2013 IDE – Mou

2

вы текущий часовой пояс (UTC+05:30) отличается от часового пояса вы превращающий в (UTC-8:00). Таким образом, вы получаете разницу. Существует разница в 13 часов и 30 минут от вашего первоначального часового пояса до целевого. 5:30 - (-8) = 13:30.

Вычитайте 13 часов и 30 минут от вашей первоначальной даты, а затем получите 18:01:00, который в 12-часовом формате составляет 6PM в предыдущий день.

Edit:

Вместо жесткого кодирования часового пояса Мексики, вам нужно будет иметь метод, с помощью которого вы можете определить часовой пояс пользователя, независимо от того, где они приходят. Это лучше всего сделать с использованием JavaScript, как указано в this answer.

+0

как это сделать программно. не могли бы вы написать код для его достижения. спасибо – Mou

+0

Я не хочу жесткого кода «Вычитаю 13 часов и 30 минут». Я хочу конвертировать дату и время UTC в локальное время клиента, предоставляя информацию о часовом поясе. – Mou

+1

Здесь нет жесткого кодирования. Это правильное местное время клиента, соответствующее вашему местному времени, когда вы находитесь утром, они ночью, в этом нет ничего плохого. Так что код в порядке. Реальный вопрос: чего вы пытаетесь достичь? –

1

Ваша проблема заключается в том, что Parse выполняется без указания часового пояса, из-за чего система будет использовать все, что по умолчанию для вашего компьютера. Похоже, что ваш компьютер НЕ находится в PST. Скорее где-то в Индии.

Поэтому, превратив его в объект DateTime, его необходимо преобразовать в UTC, указав часовой пояс PST. Есть несколько способов сделать это:

  1. Укажите смещение часового пояса как часть строки.
  2. Вызов один из TimeZoneInfo.ConvertTimeToUtc и указать timezoneid

Может быть, все, что вам нужно сделать, это конвертировать между двумя часовыми поясами по телефону ConvertTime или ConvertTimeByTimeZoneId.


    string pst = "Pacific Standard Time"; 
    TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, pst)); 

Например: 7:30 AM PST должен быть 1:30 UTC - не 2:30. Таким образом, возникает проблема в первоначальном преобразовании. 2:00 UTC к PST - действительно 6 вечера. Также я заметил, что ваш вход был 7:31, и вы утверждаете, что он выводит 2:01 - делает ли Мексика 30-минутные часовые пояса? Я знаю, что Индия.

Я использую Google для проверки конверсий путем буквального поиска «2:01 UTC to PST» и возвращает ответ для сравнения.

Посмотрите это другое сообщение, которое показывает объявление временной зоны для анализа. И, как сказано, НЕ нужно конвертировать для DST. Does ConvertTimeFromUtc() and ToUniversalTime() handle DST?

Более подробную информацию о MSDN для TimeZoneInfo: https://msdn.microsoft.com/en-us/library/bb495915(v=vs.110).aspx

+0

то, что вы сказали здесь, не очень ясно для меня, чтобы исправить мой пример кода. это будет полезно, если вы увидите мой опубликованный код и опубликуете здесь после исправления. в основном я хочу конвертировать дату и время utc в дату и время в Мексике. – Mou