Python Faker 日期时间生成返回包含日期时间的元组 - 而只是日期时间

时间:2021-03-27 08:04:15

标签: python datetime tuples comparison

出于测试目的,我想比较两个日期时间对象。

dt1 = fake.date_time() # assumming 2021-03-25 08:56:12

dt1 structure

dt2 = datetime.datetime.strptime('2021-03-25 08:56:12', "%Y-%m-%d %H:%M:%S")

dt2 structure

比较失败,因为我尝试将日期时间对象与其中包含日期时间对象的元组进行比较。

如果我尝试像这样分配元组 (dt1) 的第一个元素:

dt1 = fake.date_time()[0]

我收到以下错误:

Error directly assign tuple element

但如果我执行以下操作,它会起作用:

dt1 = fake.date_time()
dt1 = dt1[0]

我在这里有什么不明白的地方? :( 为什么 faker 不直接返回日期时间?

感谢您的帮助。

我使用 python 3.7 和 faker 6.6.2。

2 个答案:

答案 0 :(得分:0)

如果您检查 Faker date_time 函数源代码,您只会看到一个 datetime.datetime 对象返回:

def date_time(self, tzinfo=None, end_datetime=None):
    """
    Get a datetime object for a date between January 1, 1970 and now
    :param tzinfo: timezone, instance of datetime.tzinfo subclass
    :example DateTime('2005-08-16 20:39:21')
    :return datetime
    """
    # NOTE: On windows, the lowest value you can get from windows is 86400
    #       on the first day. Known python issue:
    #       https://bugs.python.org/issue30684
    return datetime(1970, 1, 1, tzinfo=tzinfo) + \
        timedelta(seconds=self.unix_time(end_datetime=end_datetime))

我怀疑对 dt1 对象应用了不需要的更改(或者它也可能是调试器错误),正如我在错误中清楚地看到的那样,datetime.datetime 对象不可下标.你会添加完整的代码以供进一步检查吗?

答案 1 :(得分:0)

当我准备在这里传递整个代码时,我发现了这个问题。

我从字典定义中复制了这一行,最后有逗号...

dt = fake.date_time(),

很明显python创建了一个元组,我只是没看到这个。