【问题标题】:python 3.6 - variable inside fstring with datetime functionpython 3.6 - 带有日期时间函数的 fstring 中的变量
【发布时间】:2018-12-22 15:02:57
【问题描述】:

我正在尝试在循环中运行以下代码行,并希望将 timedelta 定义为变量,因为它会不断变化。

START_TIME = f"{datetime.datetime.now() - timedelta(int('%d')):%d/%m/%Y 00:00}" % COUNT
END_TIME = f"{datetime.datetime.now() - timedelta(int('%d')):%d/%m/%Y 23:59}" % COUNT

但是,这失败并出现以下错误:

ValueError: invalid literal for int() with base 10: '%d'

我正在尝试获取过去几天的开始和结束时间,并对其进行一些操作。我也尝试了一些其他方法,但没有奏效。

【问题讨论】:

  • 转换为字符串应该是您的最后一步。 replace 和 timedelta 的组合应该可以解决问题
  • 感谢您为我指明正确的方向。我确实是从里到外地接近这个。现在可以使用了。

标签: python python-3.x datetime integer f-string


【解决方案1】:

这是因为字符串格式化(解决{} 中的表达式)在 printf 样式替换 (string % object) 之前执行。

虽然它似乎不太可读,但重新排列代码可能会更好 - 先计算START_TIMEEND_TIME,然后将所有内容转换为字符串。

如果您需要将它们分别放在一行中,您还可以使用括号并显式调用string.format() 方法以确保最后完成。以下非常一般的示例将起作用:

("{%d}" % 0).format('Hello')
输出:
Hello

但是,鉴于您的示例,这仍然不是很可读。

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多