GNU Dateを使用せずに特定のタイムゾーンの特定の時間をユーザーのタイムゾーンの時間に変換する

GNU Dateを使用せずに特定のタイムゾーンの特定の時間をユーザーのタイムゾーンの時間に変換する

具体的に私が知りたいのは、10:00 EST(10AM)のときのユーザーの現在のタイムゾーンは何ですか?執筆時点で、英国ユーザー(GMT)の回答は15:00(午後3時)です。

私の具体的な場合は、分や日付も必要なく、時間(15この場合)だけが必要です。

これらの性質のほとんどの問題は、現在時刻(現在)または~からユーザーのタイムゾーンです。ある時点では、変換を行うためにRubyに切り替えることもありましたが、UTC以外の場所で動作するようにするのは少し難しかったです。これを行う方法があると思いますdateが、macOSはBSDを使用しdate、ほとんどの回答はGNUを使用します。

答え1

かなり不気味ですが、MacOSではシェルと次のコマンドのみを使用して実行する必要があります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)

関連情報