Linux转换时间(不同的时区)到UTC

有没有办法,在Linux中,有问题得到一个给定的时间string的UTC时间

Tue Dec 14 10:30:23 PST 2012 Tue Jan 4 11:30:23 EST 2013 

到UTC时间,而不考虑(也不改变)本地时区设置?

Solutions Collecting From Web of "Linux转换时间(不同的时区)到UTC"

date -u -d "Tue Dec 14 10:30:23 PST 2012"报告date -u -d "Tue Dec 14 10:30:23 PST 2012" Fri Dec 14 18:30:23 UTC 2012 。 这种差异是因为2012年12月14日实际上是星期五,而不是星期二。 有效的输入可能会更好…

更新 :最近tz数据库的结果是不同的: EST在给定的日期 (相比之前的结果 ) 产生相同的utc偏移量 。 虽然不影响不同时区可能使用相同缩写的一般结论,因此相同的缩写可能对应于不同的utc偏移量。 请参阅在Python中使用时区缩写名称解析日期/时间字符串?


缩短的时区名称(如EST)可能不明确。

 #!/bin/sh for tz in Australia/Brisbane Australia/Sydney America/New_York do date -u -d"TZ=\":$tz\" Tue Jan 4 11:30:23 EST 2013" done 

产量

 Fri Jan 4 16:30:23 UTC 2013 Fri Jan 4 00:30:23 UTC 2013 Fri Jan 4 16:30:23 UTC 2013 

两件事情:

  • 根据所使用的时区,日期字符串可能被解释为不同的时刻
  • date默默地忽略了Australia/Brisbane应该是UTC+10时区,即dateEST解释为属于不同的时区。 没有EST就会产生正确的时间:

     $ date -u -d 'TZ=":Australia/Brisbane" Tue Jan 4 11:30:23 2013' Fri Jan 4 01:30:23 UTC 2013 

要查找给定时间和时区缩写的所有可能UTC时间,例如'Tue Jan 4 11:30:23 EST 2013'

 #!/usr/bin/env python from collections import defaultdict from datetime import datetime import pytz # $ sudo apt-get install python-tz # or if you can't install system-wide # $ pip install --user pytz ## Tue Dec 14 10:30:23 PST 2012 #naive_dt, tzname = datetime(2012, 12, 14, 10, 30, 23), 'PST' ## -> Fri Dec 14 18:30:23 2012 UTC # Tue Jan 4 11:30:23 EST 2013 naive_dt, tzname = datetime(2013, 1, 4, 11, 30, 23), 'EST' # Fri Jan 4 01:30:23 2013 UTC # Fri Jan 4 00:30:23 2013 UTC # Fri Jan 4 16:30:23 2013 UTC # ambiguous utc_times = defaultdict(list) for zone in pytz.all_timezones: dt = pytz.timezone(zone).localize(naive_dt, is_dst=None) if dt.tzname() == tzname: # same timezone abbreviation utc_times[dt.astimezone(pytz.utc)].append(zone) for utc_dt, timezones in utc_times.items(): print("%s:\n\t%s" % (utc_dt.strftime('%c %Z'), '\n\t'.join(timezones))) 

产量

全部Tue Jan 4 11:30:23 EST 2013解释为UTC与相应的时区名称:

 Fri Jan 4 01:30:23 2013 UTC: Australia/Brisbane Australia/Lindeman Australia/Queensland Fri Jan 4 00:30:23 2013 UTC: Australia/ACT Australia/Canberra Australia/Currie Australia/Hobart Australia/Melbourne Australia/NSW Australia/Sydney Australia/Tasmania Australia/Victoria Fri Jan 4 16:30:23 2013 UTC: America/Atikokan America/Cayman America/Coral_Harbour America/Detroit ... America/New_York ... America/Toronto Canada/Eastern EST EST5EDT Jamaica US/East-Indiana US/Eastern US/Michigan