Timezone conversion in a Google spreadsheet
我知道这看起来很简单。
在Google电子表格中,我有一栏是在一个时区(GMT)中输入时间的
并且另一列应自动获取其他时区(太平洋时间)的时间
1 2 3 | GMT | PT ----------|------------ 5:00 AM | 9:00 PM |
截至目前,我正在使用
1 | =$C$3-time(8,0,0) |
这里的问题是,我想更改夏令时的时间公式。
是否有可用的功能或脚本可以自动将夏令时纳入计算。
简短答案
没有内置函数,但是您可以构建自定义函数。
例
1 2 3 4 5 6 7 8 9 10 11 12 | /** * 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。
1 | =myFunction("October 29, 2016"&A2&" GMT","PDT","hh:mm a") |
更新
除了使用三个字母时区代码外,我们还可以使用TZ数据库名称,例如
1 | =myFunction("October 29, 2016"&A2&" GMT","America/Los_Angeles","HH:mm") |
也可以看看
- 在Google Apps脚本中计算日期之间的年,月,日
参考
- https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date
本教程非常有用:https://davidkeen.com/blog/2017/01/time-zone-conversion-in-google-sheets/
Google Sheets does not have a built in way of converting time zone data but by using the power of Moment.js and Google’s script editor we can add time zone functionality to any sheet.
这些是我复制到脚本项目中的文件:
- https://momentjs.com/downloads/moment-with-locales.js另存为moment.js
- https://momentjs.com/downloads/moment-timezone-with-data.js另存为moment-timezone.js
确保首先添加moment.js脚本,并将其置于moment-timezone.js脚本之上,因为moment-timezone.js依赖于此。
然后在另一个脚本项目中,您的Code.gs文件如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); } |
不用宏也可以做到这一点。仅使用功能和数据操作就足够了。在这里说明整个过程会比较麻烦。您只需研究各种时间功能的工作原理并利用您的创造力即可。
提示:如果需要当前日期和时间,请使用
仅在需要时间时使用
还可以在线搜索各个标准时区(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中的人们来说,他们在3月从PST到PDT,在11月从PDT到PST。山区时间,中部时间和东部时间完全相同。但是它们具有不同的UTC时间偏移。 MT是UTC-6或UTC-7。 CT是UTC-5或UTC-6。 ET是UTC-4或UTC-5。一切取决于我们是在夏季观察夏令时以更好地利用日光和工作时间,还是在冬季(又称为标准时间)。
仔细研究这些内容并了解它们的工作原理,并尝试使用Excel或Google表格中的各种时间功能(例如
官方的timeanddate dot com网站是所有人了解时区以及如何处理夏时制的良好信息来源。他们那里也有所有UTC偏移量。