将UNIX时间戳转换为日期?

时间:2019-08-06 19:06:20

标签: python-3.x matplotlib

我正在关注tutorial,由senddex负责将UNIX时间戳转换为matplotlib可以识别的日期。 我仍然是新手,虽然我了解documentation中给出的示例,因为它们非常简单,但我不明白为什么在这种情况下使用np.vectorize:

date_convert = np.vectorize(dt.datetime.fromtimestamp)
date = date_convert(date)
  1. 根据documentation,dt.datetime.fromtimestamp是否不需要1个参数?不过,这里没有传递任何论据。
  2. 虽然在dt.datetime.fromtimestamp上调用np.vectorize有什么意义?也许我还是不太了解此功能的概念。
  3. 在未将date_convert定义为函数时,怎么能在第二行接受参数?

任何帮助将不胜感激!谢谢您的耐心等待!

2 个答案:

答案 0 :(得分:4)

要使其更加透明,让我们创建自己的矢量化器。

import datetime as dt

data = [1326244364, 1326844366, 1327245361]

def myfromtimestampfunction(timestamp):
    return dt.datetime.fromtimestamp(timestamp)

def myvectorizer(input_func):

    def output_func(array_of_numbers):
        return [input_func(a) for a in array_of_numbers]

    return output_func

date_convert =  myvectorizer(myfromtimestampfunction)
dates = date_convert(data)

print(dates)

myvectorizer接受一个函数,然后输出一个函数。输入功能只能将单个数字作为输入。输出函数可以迭代。

这样可能更容易理解

  1. 您无需调用输入函数,只需将其传递给矢量化器即可。
  2. myfromtimestampfunction(data)将失败,因为data是一个列表,但是myfromtimestampfunction需要一个数字。
  3. date_convert 是一个功能,即矢量化器中的output_func。因此,它可以将参数作为输入。

答案 1 :(得分:1)

np.vectorize所做的基本上是使datetime函数可在数组而不是单个值上使用。

如果使用dt.datetime.fromtimestamp是正确的,它仅接受1个参数,但也仅适用于1个值。因此,以下具有2个日期的示例将显示一个错误。

import datetime as dt
import numpy as np

dates = np.array([13444,9000009])
dt.datetime.fromtimestamp(dates)
  

TypeError:只有大小为1的数组可以转换为Python标量

但是,使用np.vectorize会创建一个名为date_convert的新函数,该函数与dt.datetime.fromtimestamp的功能相同,但允许在数组中使用多个值。

date_convert = np.vectorize(dt.datetime.fromtimestamp)

dates = np.array([13444,9000009])
date_convert(dates)

#returns:
#array([datetime.datetime(1969, 12, 31, 20, 44, 4),
#       datetime.datetime(1970, 4, 14, 21, 0, 9)], dtype=object)