如何让电子表格指定单元格始终显示伦敦(GMT+0)当前时间
如何让电子表格指定单元格始终显示伦敦(GMT+0)当前时间
嘿,这个需求我之前帮朋友搞定过,不同电子表格软件的实现方式略有不同,我给你分情况说明哈:
Google Sheets 实现方法
Google Sheets直接支持时区参数,用下面的公式就能轻松搞定,不管用户在哪个时区,单元格都会显示伦敦当地时间(自动处理夏令时哦):
=TEXT(NOW(), "yyyy-mm-dd HH:mm:ss", "Europe/London")
- 解释一下:
NOW()获取当前的时间戳,第三个参数"Europe/London"指定时区为伦敦,TEXT()函数用来设置时间显示格式,你可以根据需求调整格式字符串,比如只想显示时间的话改成"HH:mm:ss"就行。 - 注意:Google Sheets默认会自动刷新这个公式的结果,不需要额外设置。
Excel 实现方法
Excel默认依赖系统时区,所以得用点小技巧来实现,分两种情况:
方法1:用公式自动处理夏令时(适用于Excel 365及以上版本)
Excel 365有UTCNO()函数可以直接获取UTC时间,结合英国夏令时的规则(三月最后一个周日到十月最后一个周日),用下面的公式就能得到伦敦当地时间:
=TEXT(IF(AND(DATE(YEAR(UTCNO()),3,31)-WEEKDAY(DATE(YEAR(UTCNO()),3,31),2)+1<=UTCNO(),UTCNO()<DATE(YEAR(UTCNO()),10,31)-WEEKDAY(DATE(YEAR(UTCNO()),10,31),2)+1),UTCNO()+TIME(1,0,0),UTCNO()),"yyyy-mm-dd HH:mm:ss")
- 逻辑说明:先判断当前UTC时间是否处于英国夏令时区间,是的话给UTC时间加1小时(转为BST),否则直接用UTC时间(GMT),最后用
TEXT()格式化显示。
方法2:用VBA自定义函数(适用于所有Excel版本)
如果你的Excel版本没有UTCNO(),可以写个简单的VBA函数来实现:
- 按下
Alt + F11打开VBA编辑器; - 插入一个新模块,粘贴以下代码:
Function LondonTime() As Date Dim utcTime As Date ' 获取UTC时间 utcTime = DateAdd("h", -TimeZoneInformation.Bias / 60, Now()) ' 计算英国夏令时的开始和结束日期(三月最后一个周日到十月最后一个周日) Dim dstStart As Date, dstEnd As Date dstStart = DateSerial(Year(utcTime), 3, 31 - Weekday(DateSerial(Year(utcTime), 3, 31), vbMonday) + 1) dstEnd = DateSerial(Year(utcTime), 10, 31 - Weekday(DateSerial(Year(utcTime), 10, 31), vbMonday) + 1) ' 判断是否处于夏令时,返回对应时间 If utcTime >= dstStart And utcTime < dstEnd Then LondonTime = utcTime + TimeSerial(1, 0, 0) Else LondonTime = utcTime End If End Function
- 回到Excel,在目标单元格输入
=LondonTime(),然后设置单元格格式为你需要的时间样式即可。
- 注意:使用VBA的话,文件需要保存为
.xlsm格式(启用宏的工作簿),并且打开时要启用宏。
备注:内容来源于stack exchange,提问作者tjo
相关产品推荐
相关产品推荐

