2012-03-17 46 views
12

Python'da bir modül oluşturuyorum. Bu tarihte, 13 Şubat 2012'yi gösteren 20120213 gibi tamsayı biçiminde tarih alıyorum. Şimdi, bu tamsayı biçimlendirilmiş tarihi python tarih nesnesine dönüştürmek istiyorum.Tam sayı tarih nesnesine python nasıl dönüştürülür?

Ayrıca, tarih formatını aynı biçimde almak için bu tamsayı biçimlendirilmiş tarihte gün sayısını çıkarabileceğim/ekleyebileceğim herhangi bir yöntem varsa? 20120213'dan 30 gün çıkarılmak ve 20120114 olarak yanıt almak gibi?

cevap

13

Ben dönüşüm için aşağıdaki basit bir yaklaşım öneririm:

date += timedelta(days=10) 
date -= timedelta(days=5) 
: ekleme/günlük bir keyfi miktarda (. Saniyeler çok btw çalışması) çıkarılarak için

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

, aşağıdaki yapabileceğini

Ve kullanarak geri dönüştürmek:

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

conve için ert güvenle bir dizeye tamsayı kullanın:

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

Bu dize yıl (gerçi komik haline gelebilir negatif yıl) daha küçük 1000'den olsa bile, sekiz charecters uzun ve sol yastıklı sıfır ile olmasını sağlar.

Daha referans: datetime objects, bu soru zaten cevap, ancak bu soruya bakarak başkalarının yararına aşağıdaki öneri eklemek istiyorum timedelta objects

+0

thnx :) Mutlu Kodlama ... – Uday0119

+0

ama ne alıyorum bir dize değil. onun tam bir – Uday0119

+1

tamsayı değil, tamsayı bir dizeye dönüştürmek için str (x) kullanabilirsiniz. – Peter

14

: Yerine yapıyor yukarıda önerildiği gibi kendini dilimleme Ayrıca, (IMHO) okunması daha kolay olan strptime() öğesini ve bu dönüşümü yapmak için tercih edilen yolu da kullanabilir. İşte

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

ne inanmak (tip ipuçlarıyla, Python 3) sorunun cevabının ise:

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

kod yukarıda beklenen 2016-06-18 üretir.

İlgili konular