【问题标题】:Unexpected datetime behavior意外的日期时间行为
【发布时间】:2021-01-18 12:34:08
【问题描述】:

我有一个 Django 项目,我在 models.py 中使用了这样的 strftime 函数:

class Email(models.Model):
    user = models.ForeignKey("User", on_delete=models.CASCADE, related_name="emails")
    sender = models.ForeignKey("User", on_delete=models.PROTECT, related_name="emails_sent")
    recipients = models.ManyToManyField("User", related_name="emails_received")
    subject = models.CharField(max_length=255)
    body = models.TextField(blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)
    read = models.BooleanField(default=False)
    archived = models.BooleanField(default=False)

    def serialize(self):
        return {
            "id": self.id,
            "sender": self.sender.email,
            "recipients": [user.email for user in self.recipients.all()],
            "subject": self.subject,
            "body": self.body,
            "timestamp": self.timestamp.strftime("%b %-d %Y, %-I:%M %p"),
            "read": self.read,
            "archived": self.archived
        }

但是,由于某种原因,这会返回一个 ValueError,即使根据文档 (https://www.programiz.com/python-programming/datetime/strftime),这是一个有效的格式字符串。一旦我删除了所有破折号,它就可以正常工作。为什么这不起作用?我需要导入模块还是什么?谢谢。

【问题讨论】:

  • 请提供您所需输出的示例以及您引用的文档的链接。
  • @SarahMesser 好的,我会补充的。
  • @SarahMesser 添加了您要求的信息!
  • 并非所有平台都支持那些带有破折号的格式代码,例如%-d。如果你使用了 python.org 的官方文档,你就不会被误导认为它们通常是可用的。

标签: python django strftime


【解决方案1】:

对于@jsonharper 的评论,这里是官方 Python 3 文档的链接:https://docs.python.org/3.0/library/datetime.html#strftime-behavior 正如他所指出的,该网站指出平台变化很常见,并且没有将“-”列为普遍接受的格式说明符。

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多