给定本地时间的UTC时间

时间:2015-07-09 08:04:28

标签: .net

在.net中如何根据已知的当地时间找出UTC时间?例如当地时间05:30在新加坡时的UTC是什么?

我的应用程序需要显示来自远程中心的当地时间07:00和当地时间的数据。例如,我可能需要从07:00开始从位于新加坡的机器查询伦敦的数据。伦敦可能是GMT或夏令时,在这种情况下,我的查询应该从06:00或07:00开始。

我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

您的应用程序会在处理之前将所有传入时间转换为UTC时间。当您将时间发送回客户端时,您会将时间转换回客户端本地时间。

答案 1 :(得分:0)

  • 如何根据已知的当地时间找出UTC时间?

Utc时间无处不在。

  • 新加坡当地时间05:30时的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。