2010-06-28 10 views
9

내가 준 날짜 문자열 :파이썬 사람이 읽을 수있는 날짜 차이

Mon Jun 28 10:51:07 2010 
Fri Jun 18 10:18:43 2010 
Wed Dec 15 09:18:43 2010 

일의 차이를 계산하기 편리한 파이썬 방법은 무엇입니까? 시간대가 같다고 가정합니다.

문자열이 linux 명령에 의해 반환되었습니다.

편집

:, 감사합니다 너무 많은 좋은 답변

답변

5
#!/usr/bin/env python 

import datetime 

def hrdd(d1, d2): 
    """ 
    Human-readable date difference. 
    """ 
    _d1 = datetime.datetime.strptime(d1, "%a %b %d %H:%M:%S %Y") 
    _d2 = datetime.datetime.strptime(d2, "%a %b %d %H:%M:%S %Y") 
    diff = _d2 - _d1 
    return diff.days # <-- alternatively: diff.seconds 

if __name__ == '__main__': 
    d1 = "Mon Jun 28 10:51:07 2010" 
    d2 = "Fri Jun 18 10:18:43 2010" 
    d3 = "Wed Dec 15 09:18:43 2010" 

    print hrdd(d1, d2) 
    # ==> -11 
    print hrdd(d2, d1) 
    # ==> 10 
    print hrdd(d1, d3) 
    # ==> 169 
    # ... 
6

사용 strptime.

샘플 사용 :

from datetime import datetime 

my_date = datetime.strptime('Mon Jun 28 10:51:07 2010', '%a %b %d %H:%M:%S %Y') 
print my_date 

편집 :

또한과 같이, 사람이 읽을 수있는 형태로 시간 차이를 인쇄 할 수 있습니다 :

from time import strptime 
from datetime import datetime 

def date_diff(older, newer): 
    """ 
    Returns a humanized string representing time difference 

    The output rounds up to days, hours, minutes, or seconds. 
    4 days 5 hours returns '4 days' 
    0 days 4 hours 3 minutes returns '4 hours', etc... 
    """ 

    timeDiff = newer - older 
    days = timeDiff.days 
    hours = timeDiff.seconds/3600 
    minutes = timeDiff.seconds%3600/60 
    seconds = timeDiff.seconds%3600%60 

    str = "" 
    tStr = "" 
    if days > 0: 
     if days == 1: tStr = "day" 
     else:   tStr = "days" 
     str = str + "%s %s" %(days, tStr) 
     return str 
    elif hours > 0: 
     if hours == 1: tStr = "hour" 
     else:   tStr = "hours" 
     str = str + "%s %s" %(hours, tStr) 
     return str 
    elif minutes > 0: 
     if minutes == 1:tStr = "min" 
     else:   tStr = "mins"   
     str = str + "%s %s" %(minutes, tStr) 
     return str 
    elif seconds > 0: 
     if seconds == 1:tStr = "sec" 
     else:   tStr = "secs" 
     str = str + "%s %s" %(seconds, tStr) 
     return str 
    else: 
     return None 

older = datetime.strptime('Mon Jun 28 10:51:07 2010', '%a %b %d %H:%M:%S %Y') 
newer = datetime.strptime('Tue Jun 28 10:52:07 2010', '%a %b %d %H:%M:%S %Y') 
print date_diff(older, newer) 

Original source 시간 조각에 대한 .

5
>>> import datetime 
>>> a = datetime.datetime.strptime("Mon Jun 28 10:51:07 2010", "%a %b %d %H:%M:%S %Y") 
>>> b = datetime.datetime.strptime("Fri Jun 18 10:18:43 2010", "%a %b %d %H:%M:%S %Y") 
>>> c = a-b 
>>> c.days 
10 
0

이 시도하십시오 timedelta 개체 더 나은 인쇄하는 방법에 대한 자세한 내용은

>>> (datetime.datetime.strptime("Mon Jun 28 10:51:07 2010", "%a %b %d %H:%M:%S %Y") - datetime.datetime.strptime("Fri Jun 18 10:18:43 2010", "%a %b %d %H:%M:%S %Y")).days 
10 
0
from datetime import datetime 

resp = raw_input("What is the first date ?") 
date1 = datetime.strptime(resp,"%a %b %d %H:%M:%S %Y") 
resp2 = raw_input("What is the second date ?") 
date2 = datetime.strptime(resp2,"%a %b %d %H:%M:%S %Y") 
res = date2-date1 
print str(res) 

, 당신은 this previous post을 볼 수 있습니다.

2

다른 답변과 같은 줄에는 없지만 사람이 읽을 수있는 (더 정확하지 않은) 것을 표시하려는 사용자에게 도움이 될 수 있습니다. 나는 이것을 빨리했고, 그래서 제안은 환영한다.

(이 until_seconds는 나중에 시간 소인입니다 가정합니다.)

def readable_delta(from_seconds, until_seconds=None): 
    '''Returns a nice readable delta. 

    readable_delta(1, 2)   # 1 second ago 
    readable_delta(1000, 2000)  # 16 minutes ago 
    readable_delta(1000, 9000)  # 2 hours, 133 minutes ago 
    readable_delta(1000, 987650) # 11 days ago 
    readable_delta(1000)   # 15049 days ago (relative to now) 
    ''' 

    if not until_seconds: 
     until_seconds = time.time() 

    seconds = until_seconds - from_seconds 
    delta = datetime.timedelta(seconds=seconds) 

    # deltas store time as seconds and days, we have to get hours and minutes ourselves 
    delta_minutes = delta.seconds // 60 
    delta_hours = delta_minutes // 60 

    ## show a fuzzy but useful approximation of the time delta 
    if delta.days: 
     return '%d day%s ago' % (delta.days, plur(delta.days)) 
    elif delta_hours: 
     return '%d hour%s, %d minute%s ago' % (delta_hours, plur(delta_hours), delta_minutes, plur(delta_minutes)) 
    elif delta_minutes: 
     return '%d minute%s ago' % (delta_minutes, plur(delta_minutes)) 
    else: 
     return '%d second%s ago' % (delta.seconds, plur(delta.seconds)) 

def plur(it): 
    '''Quick way to know when you should pluralize something.''' 
    try: 
     size = len(it) 
    except TypeError: 
     size = int(it) 
    return '' if size==1 else 's' 
관련 문제