2013-10-22 2 views
0

문자열로 표시된 두 개의 날짜가 있다고 가정합니다. MM-DD-YY두 문자열 날짜 중 먼저 파이썬 검사

파이썬에서 가장 먼저 날짜를 찾는 가장 효율적인 방법은 무엇입니까? 나는 다음과 같은 접근법을 시도했지만, 그것은 지저분 해졌다.

나는 다음과 같은 출력을 찾고 있어요 : return 1 if first date comes before, 0 if second date comes before, -1 if dates are exactly the same

희망 누군가가 청소기 방법

date1 = "02-20-10" 
date2 = "03-21-09" 

def firstDateBefore(date1, date2):  
    month1, day1, year1 = date1.split("-") 
    month2, day2, year2 = date2.split("-") 

    month1 = int(month1) 
    month2 = int(month2) 
    day1 = int(day1) 
    day2 = int(day2) 
    year1 = int(year1) 
    year2 = int(year2) 

    if (year1 < 13 && year2 < 13):  #both in the year 2000's 
     if (year1 < year2): 
      return 1 
     else if (year1 > year2): 
      return 0; 
     else:    #years are equal 
      if (month1 < month2): 
       return 1 
      else if (month1 > month2): 
       return 0 
      else:   #months are equal 
       if (day1 < day2): 
        return 1 
       else if (day1 > day2): 
        return 0 
       else 
        return -1 # the Dates are exactly the same! 
+0

또한, "-" –

+1

"으로 분할을 수행 한 후 문자열을 정수로 형변환해야한다는 것을 알았습니다. 처음 날짜가 오면 1을 반환하고, 두 번째 날짜가 오지 않으면 0을 반환하고, 날짜가 정확히 t이면 -1을 반환합니다. 그는 똑같은 "이상하게 들린다. 일반적으로 마지막 두 개가 바뀝니다. – glglgl

답변

3

Python comes with batteries included 있습니다.

from datetime import datetime 

d1 = datetime.strptime(date1, "%m-%d-%y") 
d2 = datetime.strptime(date2, "%m-%d-%y") 

assert d1 > d2 

What "%m-%d-%y" means.

+1

+1. 내가 가지고있는 불만은 strptime을 직접 가져 와서 namespace datetime을 제거하는 것이다. "네임 스페이스는 훌륭한 아이디어를 고수하는 것입니다. – sberry

+0

@sberry 예, [PEP-20] (http://www.python.org/dev/peps/pep-0020/)이 우리의 첫 번째 안내서가되어야합니다. –

+0

훨씬 좋아졌습니다. – sberry

0

당신은 비교 빠른에 타임 스탬프 날짜를 번역 할 수 있습니다 :

from datetime import datetime 

def firstDateBefore(date1, date2): 
    d1 = datetime.datetime.strptime(date1, '%m-%d-%y').strftime('%s') 
    d2 = datetime.datetime.strptime(date2, '%m-%d-%y').strftime('%s') 
    if d1 > d2: 
     return d1 
    elif d1 == d2: 
     return 'same date' 
    else: 
     return D2 

이 큰 날짜 또는 '같은 날짜'를 반환 exemple 날짜가 동일한 경우는 ...