【问题标题】:Compare times in Python [closed]比较Python中的时间[关闭]
【发布时间】:2012-10-11 06:28:06
【问题描述】:

我有以下代码总是从数据库中获取日期,然后它会检查当前时间是否等于数据库中的时间。它没有说拍卖开始的问题!就像它应该的那样。

所以我猜这个 if 语句是不正确的。有人可以帮助我朝着正确的方向前进吗?谢谢!

def startAuctionServer():
    global cursor

    sql = ("SELECT Auction_StartDate closestDate FROM Auctions "
           "WHERE DATE(Auction_StartDate) > '2012-10-09' "
           "ORDER BY Auction_StartDate ASC LIMIT 1")

    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        auction_startdate = row[0]
        print "AUCTION: %s" % auction_startdate

        now = datetime.datetime.now()
        print now.strftime("%Y-%m-%d %H:%M:%S")
        if auction_startdate == now.strftime("%Y-%m-%d %H:%M:%S"):
            # let the auctions begin
            print "Auction begins!"
            reactor.stop()
            return
        else:
            reactor.callLater(0.05, startAuctionServer)


print "Auction Server Started"
reactor.callLater(0, startAuctionServer)
reactor.run()

已解决

我知道我需要做什么。我使用 str 来制作值字符串,然后将它们拆分为空格。

我将 if 更改为:

if str(now.strftime("%Y-%m-%d %H:%M:%S")).split() == str(auction_startdate).split()

现在我有了我正在做的事情的基础,现在我可以开始我的项目了。

谢谢你们!

【问题讨论】:

  • 您数据库中的日期完全 与当前时间精确匹配是不是有点不太可能。您可能是要比较日期,而不是日期时间?
  • 不,日期和时间。它也没有比较毫秒。比如 2012-10-27 14:30:00 然后它会检查当前时间是否等于那个时间。
  • 如果你寻找
  • 您是否查看过数据库如何为您的auction_startdate 对象提供服务?我假设它是一个字符串——它看起来像什么?也许问题只是零填充不一致?
  • @Alec:重点是,除非执行if语句时正好是2012-10-27 14:30:00,否则比较会是假的。查询(使用 DATE(Auction_StartDate))和您的变量名称都强烈建议您需要使用日期(而不是日期时间)。

标签: python mysql twisted mysql-python


【解决方案1】:

也许您可以尝试一个不太具体的比较,例如日期:

import datetime

auction_startdate = datetime.datetime.strptime('2012-10-11 12:12:12', '%Y-%m-%d %H:%M:%S')

if auction_startdate.date() == datetime.date.today():
    # let the auctions begin
    .... etc ....

或者

if datetime.datetime.now() >= auction_startdate:

【讨论】:

  • 我需要比较时间。
  • @Alec:第二个选项然后按时间比较,即if datetime.datetime.now() >= auction_startdate:(其中auction_startdate 是使用strptime 创建的)
  • 它说当我这样做时它无法将日期时间与 str 进行比较 >=.
  • @Alec:您需要使用strptime()将从数据库返回的字符串转换为datetime对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多