在.net中,如何在已知本地时间的情况下找到协调世界时?新加坡当地时间下午五点半,协调世界时是几点?
我有一个应用程序,需要显示从07:00‘当地时间’,从远程中心的数据。例如,我可能需要从位于新加坡的机器上从07:00开始查询来自伦敦的数据。伦敦可能是GMT或Daylight savings,在这种情况下,我的查询应该从06:00或07:00开始。
我该怎么做呢?
发布于 2015-07-09 08:40:21
您的应用程序将在处理之前将所有传入时间转换为UTC时间。当您将时间发送回客户端时,您可以将时间转换回客户端的本地时间。
发布于 2015-07-09 09:04:06
无论您身在何处,Utc时间都是一样的。
您可以使用TimeZoneInfo.ConvertTimeFromUtc。
最佳实践是在执行业务逻辑之前将所有内容转换为UTC时间。这样,您总是按UTC时间查询,而您客户的时区并不重要。
发布于 2015-07-09 09:34:43
由于协调世界时不包含时区信息,您可以为新加坡的时间创建一个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 UTC 2015-07-08 21:30:00
https://stackoverflow.com/questions/31311562
复制