【问题标题】:Strange timestamp conversion奇怪的时间戳转换
【发布时间】:2016-06-07 06:54:57
【问题描述】:

我有这些日期

  • 2016-02-26 12:12:12
  • 2016-02-friday 12:12:12

(这两个日期指的是同一天)

如果我将第一个转换为时间戳,然后将其转换回可读格式,它就可以工作。

但是,如果我在第二个上尝试相同的方法,它不会转换回正确的日期!

这就是我所做的:

sTimestamp = time.mktime(
       datetime.datetime.strptime(
             "2016-02-26 12:12:12",
             "%Y-%m-%d %H:%M:%S")
      .timetuple())
print("date from timestamp = " +
       datetime.datetime.fromtimestamp(int(sTimestamp))
       .strftime('%Y-%m-%d %H:%M:%S'))

sTimestamp = time.mktime(
       datetime.datetime.strptime(
              "2016-02-friday 12:12:12",
              "%Y-%m-%A %H:%M:%S")
      .timetuple())
print("date from timestamp = " + 
       datetime.datetime.fromtimestamp(int(sTimestamp)).
       strftime('%Y-%m-%d %H:%M:%S'))

这两行的输出是:

  • 时间戳的日期 = 2016-02-26 12:12:12
  • 时间戳的日期 = 2016-02-01 12:12:12

如您所见,第一个返回 26,但第二个转换回 01,原因不明。顺便说一句,01 是星期一...

有关信息,我使用的是 python 3.4,并且我在 Windows 上。

【问题讨论】:

    标签: python date python-3.x timestamp


    【解决方案1】:

    第一个问题:

    (这两个日期指的是同一天)

    不,他们没有。第一个是指2016年2月的最后一个星期五;第二个充其量指的是 2016 年 2 月的星期五一个

    此外,strptime 旨在与数字一起使用,因为像 "Friday" 这样的字符串并不精确。 Python docs 说:

    对于时间对象,不应使用年、月和日的格式代码,因为时间对象没有这样的值。如果仍然使用它们,则用 1900 代替年份,用 1 代替月份和日期。

    所以看起来使用不精确的值,例如"Friday" 使用默认为1 的相同后备。

    【讨论】:

    • 嗯好吧!感谢您的回答。任何想法如何仍然做我想做的事?
    • @Doctor:如果你想要从friday得到26,不。使用一些额外的代码,您可以期望将最好的代码作为 2 月所有星期五的列表(或第一个星期五,或最后一个星期五,或最近的星期五,或下一个星期五)——但你必须弄清楚哪个一个你想要的。
    • @Doctor:如果你知道你总是想要“最后一个星期五”;你可以use dateutil.relativedelta()
    • 我会试试的。谢谢。
    • @J.F.Sebastian:感谢您提供的链接。我知道有这样的包,但我不使用它们,所以不记得有什么建议。
    猜你喜欢
    • 2011-11-20
    • 2013-09-01
    • 2018-11-28
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多