gpt4 book ai didi

javascript - 在新的 Date() 中指定 Olson ID

转载 作者:行者123 更新时间:2023-12-04 01:32:35 28 4
gpt4 key购买 nike

Google's example for createEventSeries (如下所示),日期值在末尾指定为“EST”。但是,我想为 recurring event (see type #4 of the kinds of times in this answer) 指定日期,例如,“每周一晚上 9 点,即使 DST 发生变化。”假设我可以确定哪一天是我的重复事件的第一个星期一。问题是我如何指定当天晚上 9 点应该考虑 DST 是否生效?

使用时区名称 (Olson ID) 指定日期会很直观,例如,使用示例中的日期“July 21, 2010 09:00:00 America/Montreal ”。如果我在 Google Apps 脚本中尝试生成的 Date 在 1969 年有一个虚假值。

我如何在 Google Apps 脚本中指定 new Date() 以便它理解我指定的 Olson ID,例如“America/Montreal”,而不是我事先知道日期实际上是“EST”还是“EDT”?

// The code below will add an event to the user's default Calendar that recurs every other day var cal = CalendarApp.getDefaultCalendar(); cal.createEvent("Busy", new Date("July 21, 2010 08:00:00 EST"), new Date("July 21, 2010 09:00:00 EST"), CalendarApp.newRecurrence().addDailyRule().interval(2), {location:'Nap room'});`

附注我找到了一个依赖于 the information that JavaScript new Date() in GAS will inherit the timezone of the script (see the 4th bullet point) 的解决方法/技巧.我可以将我的脚本的时区设置为我想要创建我的重复事件的时区,它似乎有效。但我不想依赖这个细节,因为它看起来很脆弱。

编辑

这是使用变通方法进行的小型测试的输出,以向您展示其工作原理。请注意 GMT-0500 (EST) 如何更改为 GMT-0400 (EDT)

function shortTest() {  // DST begins on Mar 10, 2012 in "America/Montreal" (Olson ID)  // This script's Project Properties show a Time zone (today, Dec 18, 2012) of   //    "(GMT-05:00) Eastern Time - Montreal"  Logger.log("Date = " + (new Date("March 9, 2013 21:00:00")));  Logger.log("Date = " + (new Date("March 10, 2013 21:00:00")));  Logger.log("Date = " + (new Date("March 11, 2013 21:00:00")));}

记录器输出

Date = Sat Mar 09 2013 21:00:00 GMT-0500 (EST)Date = Sun Mar 10 2013 21:00:00 GMT-0400 (EDT)Date = Mon Mar 11 2013 21:00:00 GMT-0400 (EDT)

最佳答案

How can I specify a new Date() in Google Apps Script such that it groks the Olson ID I specify

您可以使用 Session.getTimeZone()Calendar#getTimeZone获取一个可正确解释的字符串,分别表示脚本或日历的时区 ID。

另请参阅 Errors with Utilties.FormatDate 的答案指的是相关标的TimeZone Java doc .

您可以在 UTC 中指定您的核心日期/时间,然后通过 Utilities.formatDate 在您想要的时区显示它,但这并不能回答您的问题。

对于您的问题的核心,问题是没有查找表或函数将 GMT 偏移量转换为时区字符串,除非您使用操作系统维护者维护的操作系统深处的那个。 Javacript Date 的工作方式是使用本地计算机的时区(在我们的例子中,您可以通过脚本的时区项目属性设置更改 GAS 服务器的时区,如您所见)或者您可以指定直接在 Date 构造函数上的 GMT 偏移量。

因此,在使用 Date() 构造函数创建日期/时间时,您需要 a) 选择要使用的 GMT 偏移量或 b) 接受脚本的项目设置时区。

关于javascript - 在新的 Date() 中指定 Olson ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925476/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com