当前位置: 首页 > 知识库问答 >
问题:

在新日期()中指定Olson ID

山森
2023-03-14

在Google的createEventSeries示例(如下所示)中,日期值在末尾用“est”指定。但是,我希望为重复发生的事件指定日期(请参见本答案中的时间类型#4),例如,“每周一晚上9点,即使DST发生变化。”假设我能算出哪天是我重复发生的事件的第一个星期一。问题是我如何指定当天晚上9点应该考虑到夏令时是否生效?

使用时区名称(Olson ID)指定日期是很直观的,例如,使用示例中的日期“7月21日201009:00:00 America/Montreal”。如果我在谷歌应用程序脚本中尝试,结果日期在1969年有一个假值。

我如何在Google Apps脚本中指定新日期(),以便它可以搜索我指定的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'});`

附言。我发现了一个变通方法/hack,它依赖于这样一个信息,即GAS中的JavaScript new Date()将继承脚本的时区(请参见第4个要点)。我可以将脚本的时区设置为我要创建重复事件的时区,它似乎可以工作。但我不想依赖这个细节,因为它看起来很脆弱。

下面是一个小测试的输出,使用该变通方法来向您展示它是如何工作的。请注意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)

共有1个答案

莫选
2023-03-14

我如何在Google Apps脚本中指定一个新的Date(),使它能够找到我指定的Olson ID

您可以使用session.getTimeZone()或calendar#getTimeZone获得一个可正确解释的字符串,该字符串分别表示脚本或日历的时区id。

另请参见Utilties.FormatDate错误的答案,它引用了相关的底层时区Java文档。

您可以用UTC指定核心日期/时间,然后通过UTIties.FormatDate将其显示在所需的时区中,但这并不能回答您的问题。

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

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

 类似资料:
  • 问题内容: 我正在尝试对应该仅包含当前日期和将来日期的日期进行验证,如果该日期是较早的日期,则它应该显示 日期早于当前日期 我也想允许当前日期。现在,将当前日期设置为gievnDate,它始终显示 日期早于当前日期 但我期望输出为 日期是指定日期的未来日期,例如今天。 下面是我一直在尝试的代码: 在这里,当我检查15/02/13时,它显示为比当前日期早。我的方法是否错误?还是有更好的方法? 问题答

  • 问题内容: 是否可以指定log4j将使用的时区?我需要日志文件中的日期与应用程序的日期不同。log4j的使用。不幸的是,似乎没有一种通过模式字符串来控制时区的方法(有方法,但这无济于事)。 我查看了log4j的来源,并在中对其进行了实例化。不幸的是,没有一个简单的方法可以控制时区。 问题答案: 如果在类路径上使用Log4J extras JAR文件,则EnhancedPatternLayout类支

  • 我正在通过Spring Boot的JPA依赖关系处理我的MariaDB。 我有一个表,看起来像下面描述的表 因此,id、date和ip字段是此表的复合主键。 我试图使用以下查询更新匹配结果中最新的日期 由于数据中存在重复的-配对条目,如下所示, 我收到一条错误消息。 作为临时措施,我在子句中附加了另一个限制,以将时间范围缩小为“在最后15分钟内”。 但是我正在为这个问题寻找更优雅的解决方法。

  • 我有一个网站https://royzez.com,我使用. htaccess杠杆浏览器缓存作为GT Metrix中提到的代码,但我仍然得到消息(到期未指定)。这些图像来自CDN。那么CDN服务器中还有其他配置吗?如何解决这个问题。我使用的代码是' #CSS ExpiresByType text/css"访问加1个月" #Favicon(无法重命名!)和光标图像过期按类型图像/x图标“访问加1周”

  • 问题内容: 如何找出上一个(上一个)“星期五”或指定日期之后的其他日期的日期? 问题答案: 我不会给出答案(请先尝试一下!),但是,也许这些技巧可以为您提供帮助。 您首先需要确定您所在的星期几。您可能想看一下Java的Calendar类,以了解如何做到这一点。 确定日期后,请考虑模数运算符以及如何使用该运算符向后移动以从当前所在的日期开始寻找所需的前一天。(请记住,一周是7天,一周中的每一天在这7

  • 问题内容: 如果我在两个文本框中有两个日期20-4-2010和22-4-2010,并且我希望日期像这样的20、21、22,我该如何得到? 问题答案: 我很确定这已经回答了四千万次,但是无论如何: 该部分是为了防止代码跳过或者一天重复由于夏令时。 通过给出天数: 使用PHP5.3