Python - Date & Time Comparison using timestamps, timedelta

前端 未结 3 1765
没有蜡笔的小新
没有蜡笔的小新 2021-01-03 20:46

I\'ve spent the past hour digging around the Python docs and many SO questions; please forgive me for being another Python newbie trapped by the mystery of time difference i

相关标签:
3条回答
  • 2021-01-03 20:58

    You should be able to use

    tdelta.total_seconds()
    

    to get the value you are looking for. This is because tdelta is a timedelta object, as is any difference between datetime objects.

    A couple of notes:

    1. Using strftime followed by strptime is superfluous. You should be able to get the current datetime with datetime.now.
    2. Similarly, using time.ctime followed by strptime is more work than needed. You should be able to get the other datetime object with datetime.fromtimestamp.

    So, your final code could be

    now = datetime.now()
    then = datetime.fromtimestamp(os.path.getmtime("x.cache"))
    tdelta = now - then
    seconds = tdelta.total_seconds()
    
    0 讨论(0)
  • 2021-01-03 21:20

    What's wrong with this method?

    >>> from datetime import datetime
    >>> a = datetime.now()
    >>> b = datetime.now() # after a few seconds
    >>> delta = a-b
    >>> delta.total_seconds()
    -6.655989
    

    Note that total_seconds is only available in Python 2.7 <, but per the documentation is:

    Equivalent to (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 computed with true division enabled.

    which yields the exact same result.

    0 讨论(0)
  • 2021-01-03 21:23

    I had the same problem couple of months ago. What you are looking for is datetime.timedelta and datetime.datetime.fromtimestamp(). Here is an example for how to use them to fix your problem.

    import datetime
    import time
    t1 = time.time()
    #do something to kill time or get t2 from somewhere
    a = [i for i in range(1000)]
    t2 = time.time()
    #get the difference as datetime.timedelta object
    diff=(datetime.datetime.fromtimestamp(t1) - datetime.datetime.fromtimestamp(t2))
    #diff is negative as t2 is in the future compared to t2
    print('difference is {0} seconds'.format(abs(diff.total_seconds())))
    
    0 讨论(0)
提交回复
热议问题