Google电子表格中的时区转换

问题描述 投票:19回答:3

我知道这很简单。

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

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

截至目前我正在使用

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

这里的问题是,我想更改夏令时的时间公式。

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

google-apps-script google-sheets timezone dst formulas
3个回答
15
投票

Short answer

没有内置函数,但您可以构建自定义函数。

/**
 * 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)
}

Explanation

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

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

See also

References


2
投票

这也可以在没有宏的情况下完成。只需使用函数和数据操作就足够了。在这里解释整个过程会有点麻烦。只需研究各种时间功能如何发挥作用并运用你的创造力。

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

当您只想要时间时使用= NOW() - INT(NOW())(如果两个时间都落在同一日期,则截断日期)。然后格式化相应的一个或多个单元格的时间(即下午4:30),而不是日期时间(3/25/2019 17:00:00)。后者是您想要显示日期和时间时使用的格式...就像您使用NOW()时一样。

还可以在线搜索相对于协调世界时(UTC)的各种标准时区(PT,MT,CT,ET,AT)的夏令时偏移。例如,在2019年太平洋时间的偏移量为UTC-7,从3月10日凌晨2点(太平洋)开始观测到夏令时,直到11月3日凌晨2点。这意味着从UTC到太平洋的时间差异为7小时。其余时间为8小时(UTC-8)。在DST庆祝开始的3月(今年10月)开始时,它通过将时钟向前移动1小时或者我们所知的UTC-7(那是夏令时)从PST到PDT。在DST遵守之后,它通过将时钟再次移回1小时,或者我们所知的UTC-8(或冬季时间),从PDT进入PST。请记住,时钟在三月提前一小时,以便更好地利用时间。这就是我们所说的夏令时或夏令时。因此,在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。所有这些都取决于我们是否在夏令时观察夏令时以更好地利用日光和工作时间,或冬季时间(AKA,标准时间)。

彻底研究这些并理解它们是如何工作的,并在Excel或Google表格中使用各种时间函数,如TIME(#,#,#)和NOW()函数等,相信我,很快你就能够无需使用VBA即可完成普通功能的专业操作。你也可以使用TEXT()函数,例如= TEXT(L4,“DDD,MMM D”)和“|”&TEXT(L4,“h:mm AM / PM”)等技巧,其中L4包含你的日期-timestamp,用于显示时间和日期格式。 VALUE()函数也时不时地派上用场。您甚至可以在不使用宏的情况下设计数字倒数计时器。您需要在电子表格设置中创建循环引用并将迭代设置为1,并将时间显示为每1分钟一次。

官方timeanddate dot com网站是一个很好的信息来源,让所有人都知道时区以及如何处理日光时间。它们也具有所有UTC偏移量。祝好运。


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依赖于它。

然后在您的其他脚本项目中,您的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

© www.soinside.com 2019 - 2024. All rights reserved.