2012-03-17 46 views
12

我在python中創建了一個模塊,其中我使用整數格式(如20120213,表示2012年2月13日)接收日期。現在,我想將此整數格式的日期轉換爲python日期對象。如何將整數轉換爲日期對象python?

此外,如果有任何方法可以減去/添加此類整數格式化日期中的天數以接收相同格式的日期值?比如從20120213減去30天,並收到答案爲20120114

回答

13

我建議轉換以下簡單的方法:

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])) 

對於加/減天的arbitary量(秒工作太BTW),你可以做到以下幾點:

date += timedelta(days=10) 
date -= timedelta(days=5) 

並轉換回用:

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

於CONV ERT整數爲字符串安全,使用方法:

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

這可以確保您的字符串是八個charecters長,左側填充零,即使年份小於1000(陰性年可能會成爲有趣的,雖然)。

更多參考:datetime objectstimedelta objects

+0

thnx :)快樂編碼... – Uday0119 2012-03-17 13:34:37

+0

但我接收的不是一個字符串。它的整數 – Uday0119 2012-03-17 13:36:22

+1

好吧,這並不難,你可以使用str(x)將整數轉換爲一個字符串。 – Peter 2012-03-17 13:42:25

14

這個問題已經回答了,但對於其他人在看這個問題的好處我想補充以下建議:與其做切片你之上你的建議也可能使用(IMHO)更容易閱讀的strptime(),也許是進行這種轉換的首選方式。

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

以下是我認爲回答這個問題(Python 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