日期时间以较少的行进行

时间:2014-07-17 18:10:11

标签: python datetime amazon-dynamodb

现在我正在使用以下函数来计算这样的日期和时间(ymd),(hms)。我相信这样比较容易。

def getDayAsInt():
    time = datetime.datetime.now()
    year = time.strftime("%Y")
    month=makeTimeTwoDigit(time.strftime("%m"))
    day=makeTimeTwoDigit(time.strftime("%d"))
    return year+month+day
def getTimeOfDay():
    day=makeTimeTwoDigit(time.strftime("%d"))
    hour=makeTimeTwoDigit(time.strftime("%H"))
    minute=makeTimeTwoDigit(time.strftime("%M"))
    second=makeTimeTwoDigit(time.strftime("%S"))
    return hour+minute+second 

我最初尝试过这样的事情:

    'date': str(datetime.now()),

但是我遇到了一个更容易生成日期范围来查询它的问题。例如,如果今天是20140616,我可以简单地查询20140601和20140616之间的日期,因为生成所有可能的日期时间更难。这有意义吗?

Ex我想找出今天发生的事件,但是在dynamodb中存储日期时间字符串比较难以匹配(更多要匹配的东西)。

我想知道是否有更简单或更有效的方式?像那样打破日期和时间?我应该这样做:

    year = time.strftime("%Y")
    month=makeTimeTwoDigit(time.strftime("%m"))
    day=makeTimeTwoDigit(time.strftime("%d"))

并且做到一线吗?我应该做time.strftime(“%Y%m%d”)?

2 个答案:

答案 0 :(得分:1)

如果你在python中进行比较,一个更简单的解决方案是使用内置datetime个对象和常规比较运算符,如<>

from datetime import datetime

dt_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

if datetime(2006, 6, 5, 0, 0, 0) <= dt_object < datetime(2006, 6, 6, 0, 0, 0):
    # do something when date is anytime on June 5th, 2006

如果您必须在查询中进行比较,只要日期以ISO-8601格式存储,您就可以使用常规字符串比较。 ISO-8601的优点是按时间顺序排序相当于词法排序,即您可以将它们视为普通字符串。

使用ISO-8601格式的等效比较:

'2006-06-05T00:00:00Z' <= dt < '2006-06-06T00:00:00Z'

答案 1 :(得分:1)

我认为从时间(小时/分钟/秒)开始(日/月/日)是最干净的解决方案,因为你想在当天进行查询。