2012-03-17 3 views
12

파이썬에서 모듈을 만들고 있는데, 2012 년 2 월 13 일을 의미하는 20120213과 같은 정수 형식의 날짜를 받고 있습니다. 이제이 정수 형식의 날짜를 파이썬 날짜 객체로 변환하고 싶습니다.날짜 개체 파이썬으로 정수를 변환하는 방법?

또한 같은 형식으로 날짜 값을 받기 위해 정수 형식의 날짜 수를 뺄/추가 할 수있는 방법이 있습니까? 20120213에서 30 일을 뺀 다음 응답을 20120114으로받는 것과 같습니다.

답변

13

가 나는 변환을 위해 다음과 같은 간단한 방법 제안 :

date += timedelta(days=10) 
date -= timedelta(days=5) 
: 추가/일의 인해 임의 양 (. 초는 너무 BTW 일) 빼기에

from datetime import datetime, timedelta 
s = "20120213" 
# you could also import date instead of datetime and use that. 
date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8])) 

을 다음을 수행 할 수

그리고 사용하여 다시 변환 :

s = date.strftime("%Y%m%d") 

전환하기 ERT 안전하게 문자열로 정수, 사용

s = "{0:-08d}".format(i) 

이 당신의 문자열은 올해 (하지만 재미가 될 수 부정적 년)보다 작은 천 경우에도 팔 개 많은 charecters 길고 왼쪽 패딩 제로에 있음을 보장합니다.

또한 참조 : datetime objects,이 질문은 이미 대답하지만,이 질문을보고 다른 사람의 이익을 위해 나는 다음과 같은 제안을 추가 할 timedelta objects

+0

thnx :) 해피 코딩 ... – Uday0119

+0

하지만 내가받는 문자는 문자열이 아닙니다. 그것의 정수 – Uday0119

+1

잘 아니에요, 당신은 문자열로 정수를 변환 str (x)를 사용할 수 있습니다. – Peter

14

대신의 일을 당신이 위의 제안으로 자신을 깔끔히 strptime()을 (IMHO) 읽기 쉽고 아마도이 변환을 수행하는 기본 방법 일 수도 있습니다. 여기

import datetime 
s = "20120213" 
s_datetime = datetime.datetime.strptime(s, '%Y%m%d') 
2

는 제가 생각하는 (유형 힌트, 파이썬 3) 질문에 대한 대답입니다 :

from datetime import date 


def int2date(argdate: int): 
    """ 
    If you have date as an integer, use this method to obtain a datetime.date object. 

    Parameters 
    ---------- 
    argdate : int 
     Date as a regular integer value (example: 20160618) 

    Returns 
    ------- 
    dateandtime.date 
     A date object which corresponds to the given value `argdate`. 
    """ 
    year = int(argdate/10000) 
    month = int((argdate % 10000)/100) 
    day = int(argdate % 100) 

    return date(year, month, day) 


print(intdate2date(20160618)) 

위의 코드는 예상 2016-06-18을 생산하고 있습니다.