【问题标题】:How can I create an event in a time zone other than the calendar's time zone?如何在日历时区以外的时区创建活动?
【发布时间】:2014-01-30 20:44:27
【问题描述】:

我正在使用来自 .NET(确切地说是 VB.NET)的 Google API,它以我不理解的方式创建事件。

我的日历是东部时间,我正在尝试创建一个将在另一个时区的固定时间举行的活动。具体来说,我想制作一个将在洛杉矶当地时间下午 1:00 发生的事件。

这是我的代码:

Dim dStart As New DateTime(2014, 1, 30, 13, 0, 0)
Dim dEnd = dStart.AddHours(2)

e.Start = New EventDateTime With {.DateTime = dStart, .TimeZone = "America/Los_Angeles"}
e.End = New EventDateTime With {.DateTime = dEnd, .TimeZone = "America/Los_Angeles"}

Dim ins As New InsertRequest(service, e, calendar.Id)
ins.Execute()

我希望这会发生这样的事件:

1/30/2014 @ 1:00PM (GMT-08:00) Pacific Time

但是,它创建了这个事件:

1/30/2014 @ 10:00AM (GMT-08:00) Pacific Time

换句话说,它知道使用太平洋时间,但它这样做并且减去三个小时。为什么会这样做,我怎样才能在正确的时间创建一个事件?

【问题讨论】:

    标签: .net google-api


    【解决方案1】:

    EventDateTime.DateTime 始终与您的本地时区一起计算,因此您必须在您的时区中设置日期。在这种情况下,EventDateTime.TimeZone 仅用于显示时间偏移 - 在您的情况下(GMT-8),但不会影响时间本身

    Dim dStart As New DateTime(2014, 1, 30, 13 - myTimeZone + targetTimeZone, 0, 0)
    

    查看这个article,如何判断时差

    【讨论】:

    • 谢谢,这就是我要做的。所以你是说时区实际上除了说“太平洋时间”之外没有其他用途?这似乎真的违反直觉。
    • 我在similar 问题上花了一些时间,然后决定通过UTC(小时 - myTimeZone + targetTimeZone)
    • 这就是我要做的,谢谢。但这对我来说还是有点笨拙。
    • 不要忘记,您传递的 DateTime 对象已经包含您的本地 timeZone :) 为了证明只需将您的本地时区更改为另一个,您就会看到。如果您省略 EventDateTime.TimeZone 它将使用谷歌日历默认时区显示特定日历
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多