【问题标题】:Python time integer issuePython时间整数问题
【发布时间】:2023-04-04 03:14:01
【问题描述】:

我正在尝试计算“当时”和“现在”之间的时间差。我改变了格式,以便更好地比较它(我不需要秒或纳秒等)

'then' 时间来自加密,并且正在被解析以进行比较,这就是我担心的错误。

def decrypt_and_compare_date():
        from Crypto.Cipher import XOR
        from datetime import timedelta, datetime, date
        import base64
        import config
        cipher = XOR.new(cryptopassword)
        encrypted = cipher.decrypt(base64.b64decode(config.event_date))
        then = date(encrypted)
        now = date(2015,10,5)
        days = (now - then).days
        print days + " days ago."

给我以下错误:

TypeError:需要一个整数

如果我在这一行使用 *:

    then = date(encrypted)

然后它会解析我这个错误。

TypeError:函数最多接受 3 个参数(给定 8 个)

日期(加密)应该是2015,7,1

有人知道魔术吗?

【问题讨论】:

  • encrypted的值是多少?
  • date("2015,7,1")date(2015,7,1) 不同,请改用date(*map(int, date_string.split(",")))。你不能使用1 + " days ago",使用"%d days ago" % days。 Python 是强类型的。了解对象与其字符串表示之间的区别(打开 REPL,导入您的模块并使用其中的各种对象:调用 repr(obj)str(obj)print(obj)type(obj)isinstance(obj, str)encrypteddecrypt() 调用结果的错误名称,请改用 date_string

标签: python date datetime integer timedelta


【解决方案1】:

尝试使用datetime.strptime() 将字符串解析为日期。

例子-

>>> s = "2015,7,1"
>>> from datetime import datetime
>>> d = datetime.strptime(s,'%Y,%m,%d').date()
>>> d
datetime.date(2015, 7, 1)

这是基于假设字符串中的第二个数字是月份,第三个是日期,如果相反,则在 '%Y,%m,%d' 中交换 %m%d

【讨论】:

  • 可悲的是 d = datetime.strptime(encrypted, "%Y,%m,%d").date() 返回 2015-07-01,而不是 2015, 7, 1
  • 有什么区别,它是一个日期对象。
  • 无论如何,您只是减去日期并计算它们之间的天数?
  • 我是,但除了尝试之外,我无法找到其他方法。我能找到的每个文档都包括秒和纳秒,我真的想要两个日期之间的 DD-MM-YYY 比较。
  • 您的代码(经过我的修改 - then = datetime.strptime(encrypted,'%Y,%m,%d').date())应该可以工作,您是否遇到任何问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2015-02-10
  • 2019-05-03
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多