Google电子表格中的时区转换

时间:2016-01-22 12:31:24

标签: google-apps-script google-sheets timezone dst formulas

我知道这很简单。

在Google电子表格中,我有一个列,我在一个时区(GMT)中输入时间 另一列应自动在另一个时区(太平洋时间)获取时间

 GMT      | PT
----------|------------
 5:00 AM  | 9:00 PM

截至目前我正在使用

 =$C$3-time(8,0,0)

问题在于,我想更改夏令时的时间公式。

是否有任何可用的功能或脚本可以将夏令时自动保存到计算中。

5 个答案:

答案 0 :(得分:14)

简短回答

没有内置功能,但您可以构建自定义功能。

实施例

/**
 * Converts a datetime string to a datetime string in a targe timezone.
 *
 *@param {"October 29, 2016 1:00 PM CDT"} datetimeString Date, time and timezone.
 *@param {"GMT"} timeZone Target timezone
 *@param {"YYYY-MM-dd hh:mm a z"} Datetime format
 *@customfunction
 */
function myFunction(datetimeString,timeZone,format) {
  var moment = new Date(datetimeString);
  return Utilities.formatDate(moment, timeZone, format)
}

解释

为了考虑夏令时时区,要转换的值的输入参数应包括日期,而不仅仅是一天中的时间。您可以通过在调用公式之前连接来设置datetimeString来设置默认日期和时区。

=myFunction("October 29, 2016 "&A2&" GMT","PDT","hh:mm a")

更新

除了使用三个字母的时区代码外,我们还可以TZ database names使用America/Los_Angeles,例如:

=myFunction("October 29, 2016 "&A2&" GMT","America/Los_Angeles","HH:mm")

另见

参考

答案 1 :(得分:2)

本教程非常有用:https://davidkeen.com/blog/2017/01/time-zone-conversion-in-google-sheets/

  

Google表格没有内置的时区数据转换方式,但是通过使用Moment.js和Google的脚本编辑器的强大功能,我们可以将时区功能添加到任何表格中。

这些是我复制到脚本项目中的文件:

请确保首先添加moment.js脚本,并将其置于moment-timezone.js脚本之上,因为moment-timezone.js依赖于此。

然后在您的 other 脚本项目中,您的Code.gs文件如下所示:

var DT_FORMAT = 'YYYY-MM-DD HH:mm:ss';

/**
https://stackoverflow.com/questions/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function toUtc(dateTime, timeZone) {  
  var from = m.moment.tz(dateTime, DT_FORMAT, timeZone);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
  return from.utc().format(DT_FORMAT);
}

/**
https://stackoverflow.com/questions/34946815/timezone-conversion-in-a-google-spreadsheet/40324587
*/
function fromUtc(dateTime, timeZone) {
  var from = m.moment.utc(dateTime, DT_FORMAT);//https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/
  return from.tz(timeZone).format(DT_FORMAT);
}

enter image description here

答案 2 :(得分:1)

那也可以不用宏来完成。仅使用功能和数据操作就足够了。在这里说明整个过程会比较麻烦。您只需研究各种时间功能的工作原理并利用您的创造力即可。

提示:如果需要当前日期和时间,请使用=NOW()。如果您需要找出不同日期之间的准确时间差异,则实际上需要此功能。

仅在需要时间时使用=NOW()-INT(NOW())(如果两个时间都在同一日期,则日期将被截断)。然后,将相应的一个或多个单元格格式化为时间(即4:30 PM),而不是日期时间(3/25/2019 17:00:00)。后者是您想要同时显示日期和时间的格式,例如使用NOW()时。

还可以在线搜索各个标准时区(PT,MT,CT,ET,AT)相对于协调世界时(UTC)的夏令时偏移量。例如,在2019年太平洋时间的偏移量是UTC-7,此时观察到的夏令时开始于3月10日凌晨2点(太平洋时间),直到11月3日凌晨2点。这意味着从UTC到太平洋的时间差是7小时。一年中的其余时间为8小时(UTC-8)。在3月某个时候(本年的10月)开始进行DST观测期间,它通过将时钟向前移动1个小时(也就是我们所说的UTC-7)(夏令时)而从PST到PDT。遵守DST后,通过将时钟再次移回1小时或我们称为UTC-8(或冬季时间),它从PDT变为PST。请记住,三月份的时钟提前了一个小时,以更好地利用时间。这就是我们所说的DST(夏令时)。因此,3月8日凌晨2点(今年是2019年)之后,我们进入UTC-7。在11月,我们做相反的事情。 11月3日凌晨2点,随着冬天的来临,时钟将恢复一小时。那时我们回到标准时间。似乎有点令人困惑,但实际上不是。

因此,基本上,对于PT中的人们来说,他们在三月从PST到PDT,在十一月从PDT到PST。山区时间,中部时间和东部时间完全相同。但是它们具有不同的UTC时间偏移。 MT是UTC-6或UTC-7。 CT是UTC-5或UTC-6。 ET是UTC-4或UTC-5。一切取决于我们是在夏季观察夏令时以更好地利用日光和工作时间,还是在冬季(又称为标准时间)。

仔细研究这些内容并了解它们的工作原理,并尝试使用Excel或Google表格中的各种时间功能,例如TIME(#,#,#)NOW()等功能,相信我,很快您就会无需使用 VBA Google Apps脚本即可完成具有普通功能的专业人士之类的工作。但是,您还可以使用TEXT()函数,并使用=TEXT(L4,"DDD, MMM D")&" | "&TEXT(L4,"h:mm AM/PM")之类的技巧来显示时间和日期格式,其中L4包含您的日期时间戳。 VALUE()函数有时也会派上用场。您甚至可以不使用宏而设计数字倒数计时器。您需要在电子表格设置中创建一个循环引用并将迭代次数设置为1,并将时间显示设置为每1分钟一次。

timeanddate.com官方网站是所有人了解时区以及如何处理夏令时的良好信息来源。它们在那里也有所有UTC偏移量。

答案 3 :(得分:0)

在Google表格中创建自己的时区转换器:

步骤1: Create your table for the timezone converter.

第2步: Enter the times for your time zones in a column. 注意:请确保您选择日期/时间格式(选择单元格->格式->数字->时间/日期)

步骤3:使用以下函数编写公式以转换时区 Google Sheet Functions

=HOUR(A8)+(B3*C3) converts the hours.
=MINUTE(A8)+(B3*C3) converts the minutes.

第4步:使用TIME(h,m,s)函数转换回时间格式

=TIME(HOUR(A8)+(B3*C3), MINUTE(A8)+(B3*C3), SECOND(A8))

这是转换时区的简单方法。 但是,如果您想实现一个精确的时区转换器,可以照顾前一天,第二天以及24小时以上,60分钟以上的时间,请使用MOD操作并处理所有情况。 访问(或使用)此Google工作表以供参考: https://docs.google.com/spreadsheets/d/1tfz5AtU3pddb46PG93HFlzpE8zqy421N0MKxHBCSqpo/edit?usp=sharing

答案 4 :(得分:0)

发现此页面时,我遇到了同样的问题(将马尼拉时间换算为悉尼时间,并自动调整夏令时)。

我不想使用自定义功能,但我发现在悉尼,AEST(澳大利亚东部标准时间)在4月的第一个星期日开始,而AEDT(澳大利亚东部夏令时)在10月的第一个星期日开始

所以我想,如果我可以找到一个公式来检测日期是否介于4月的第一个星期日和10月的第一个星期日之间(标准时间),那么我可以自动将1小时加到通常的2小时马尼拉时间夏令时(两个日期以外的日期)具有悉尼时间。

这两个Excel解决方案在Google表格中效果很好:

今年4月的第一个星期日(A1):

=CONCATENATE("4/1/",Year(today()))+CHOOSE(WEEKDAY(CONCATENATE("4/1/",Year(today())),1),7,6,5,4,3,2,1)

今年10月的第一个星期日(A2):

=CONCATENATE("10/1/",year(today()))+CHOOSE(WEEKDAY(CONCATENATE("10/1/",year(today())),1),7,6,5,4,3,2,1)

DST检测器(A3)-如果某个日期落在这两个日期之外,则为悉尼的DST:

=IF(AND(today()>A1,today()<A2),"AEST","AEDT")

悉尼时间(A4)

=NOW()+TIME(IF(A3="AEDT",3,2),0,0)

NOW()可以更改为任何时间格式以进行制表:

enter image description here