将特定时区的特定时间转换为用户时区的时间,而不使用 GNU 日期

将特定时区的特定时间转换为用户时区的时间,而不使用 GNU 日期

具体来说,我想知道的是:当 EST 10:00 (10AM) 时,用户当前时区是几点?在撰写本文时,对英国用户 (GMT) 的回答是 15:00 (3PM)。

对于我的具体情况,我什至不需要分钟或日期,只需要小时(15在本例中)。

大多数此类性质的问题都与转换当前时间(现在)或用户的时区。有一次我什至求助于 ruby​​ 来进行转换,但让它在 UTC 以外的任何地方工作有点困难。我觉得一定有办法用 来做到这一点date,但 macOS 使用 BSD date,大多数答案都使用 GNU。

答案1

它相当笨重,但这应该在 MacOS 上仅使用 shell 和命令来完成date

将北美东部时间 2017-01-05 10:00:00 转换为系统本地时区:

date -r $(TZ=America/Montreal date -j 010510002017 +%s)

要将其转换为本地时区以外的时区,请在外部命令前加上所需的目标时区:

TZ=Australia/Sydney date -r $(TZ=America/Montreal date -j 010510002017 +%s)

请注意极其奇怪的日期输入格式:mmddHHMMYYYY

答案2

POSIX API 在这方面并不是很丰富。你可能最好使用类似的东西皮兹比系统工具:

#!/usr/bin/python

import datetime
import pytz

eastern = pytz.timezone('America/Montreal')
britain = pytz.timezone('Europe/London')
datetime.datetime(2017, 1, 5, 10, 0, tzinfo=eastern).astimezone(britain)

相关内容