在.net中如何根据已知的当地时间找出UTC时间?例如当地时间05:30在新加坡时的UTC是什么?
我的应用程序需要显示来自远程中心的当地时间07:00和当地时间的数据。例如,我可能需要从07:00开始从位于新加坡的机器查询伦敦的数据。伦敦可能是GMT或夏令时,在这种情况下,我的查询应该从06:00或07:00开始。
我怎么能这样做?
答案 0 :(得分:0)
您的应用程序会在处理之前将所有传入时间转换为UTC时间。当您将时间发送回客户端时,您会将时间转换回客户端本地时间。
答案 1 :(得分:0)
Utc时间无处不在。
您可以使用TimeZoneInfo.ConvertTimeFromUtc。
最佳做法是在执行businesslogic之前将所有内容转换为UTC时间。这样,您始终可以查询UTC时间,并且客户的时区无关紧要。
答案 2 :(得分: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。