2015-07-09 2 views
0

В .net, как я могу узнать время UTC, учитывая известное местное время? например UTC, когда 05:30 по местному времени в Сингапуре?Время UTC в указанное местное время

У меня есть приложение, которое должно отображать данные с 07:00 по местному времени, из удаленных центров. Например, мне может потребоваться запрашивать данные из Лондона, начиная с 07:00, с машины, базирующейся в Сингапуре. Лондон может находиться в режиме GMT ​​или Daylight, и в этом случае мой запрос должен начинаться с 06:00 или 07:00.

Как я могу это сделать?

+2

UTC везде везде. Вы ищете 'DateTime.UtcNow'? –

+0

Я перефразировал вопрос - моя ошибка –

+0

Перефразировка не помогла. UTC везде везде. Нет времени «UTC в определенное местное время». Вы пытаетесь преобразовать время UTC в местное время? Или вы пытаетесь преобразовать местное время в UTC? –

ответ

0

Ваше приложение будет конвертировать все входящие запросы в UTC до обработки. Когда вы отправляете время назад клиенту, вы отправляете время обратно на локальное время клиентов.

+0

Или он должен использовать [DateTimeOffset] (https://msdn.microsoft.com/en-us/library/system.datetimeoffset (v = vs.110) .aspx), чтобы избежать неоднозначности часового пояса –

0
  • Как узнать время UTC с учетом местного времени?

Utc Время такое же, как и везде.

  • Какой UTC, если это 05:30 по местному времени в Сингапуре?

Вы можете использовать TimeZoneInfo.ConvertTimeFromUtc.


Лучшей практикой является конвертировать все в UTC, прежде чем выполнять свою бизнес-логику. Таким образом, вы всегда запрашиваете время UTC, а часовой пояс вашего клиента не имеет значения.

0

Как DateTime не включает в себя информацию часового пояса, вы можете сделать один за время в Сингапуре, и использовать это в DateTimeOffset, которые вы можете использовать, чтобы получить время UTC (и дата), соответствующий тому, что:

Option Infer On 

Module Module1 

    Sub Main() 
     Dim dtFormat = "yyyy-MM-dd HH:mm:ss" 

     Dim tzi = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time") 
     Dim d = DateTime.UtcNow 
     Dim singaporeTime = TimeZoneInfo.ConvertTimeFromUtc(d, tzi) 

     Console.WriteLine("It is " & singaporeTime.ToString(dtFormat) & " in Singapore.") 

     Dim st = New DateTime(2015, 7, 9, 5, 30, 0) ' local time in Singapore ' 
     Dim sst As New DateTimeOffset(st, tzi.GetUtcOffset(st)) 

     Console.WriteLine("At " & st.ToString(dtFormat) & " in Singapore it is " & sst.ToUniversalTime.ToString(dtFormat) & " UTC.") 

     Console.ReadLine() 

    End Sub 

End Module 

Который сейчас выводит

Он находится в Сингапуре 2015-07-09 17:34:09.
В 2015-07-09 05:30:00 в Сингапуре это 2015-07-08 21:30:00 UTC.

+0

Большое спасибо Andrew! –

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