将 unix 时间戳列表转换为 python 中其他时区的日期和时间字符串列表

convert a list of unix timestamps to a list of date and time strings for some other time zone in python

考虑 posix 个时间戳列表

posix_times = [1490750889, 1490751209, 1490751569]

我想将数组中的每个元素转换为包含 US/Pacific 时区的本地日期和时间的文本字符串:

 ["3/28/2017 18:28:09", "3/28/2017 18:33:29", "3/28/2017 18:39:29"]

执行此操作需要最少的包导入的最简单方法是什么?

相关问题已在 Converting unix timestamp string to readable date in Python 中得到解决,例如提供以下形式的解决方案:

posix_time = 1490750889
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

它不提供将这个时间转换为另一个时区的明确能力。此外,这种方法似乎不适用于列表,需要 for loop/list 理解。

您可以将 UNIX 时间戳转换为 datetime 对象,然后使用其 strftime 方法对其进行格式化。但是,这会给你一个时区未知的日期时间。为了使其能够识别时区,您需要从 pytz 获取时区并使用 localize 方法:

from datetime import datetime
from pytz import timezone

# ...

def format_time(time, tz):
  localized = tz.localize(datetime.fromtimestamp(time))
  return localized.strftime('%d/%m/%Y %H:%M:%S')

us_pacific = timezone('US/Pacific')
dates = map(lambda t: format_time(t, us_pacific), posix_times)

您可以使用标准 datetime 库执行此操作:

In [1]: import datetime

In [2]: posix_times = [1490750889, 1490751209, 1490751569]

In [3]: [datetime.datetime.fromtimestamp(x).strftime("%x %X") for x in posix_times]
Out[3]: ['03/28/17 20:28:09', '03/28/17 20:33:29', '03/28/17 20:39:29']