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

时间:2017-04-15 03:50:41

标签: python unix time posix

考虑posix时间戳列表

posix_times = [1490750889, 1490751209, 1490751569]

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

 ["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循环/列表理解。

2 个答案:

答案 0 :(得分:2)

您可以使用标准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']

答案 1 :(得分:1)

您可以将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)