SORU
19 NİSAN 2009, Pazar


Yıl içinde Python timedelta

Eğer yıl sayısı biraz tarihten beri olmadığını kontrol etmek istiyorum. Şu anda datetime modülü timedelta var ve yıl dönüştürmek için nasıl bilmiyorum.

CEVAP
19 NİSAN 2009, Pazar


Bir daha timedelta nasıl geçti söyle; sana da (ya da bitiş) başlangıç tarihi bilmek gerekir. (Artık yıl olmuş.)

En iyi bahisdateutil.relativedelta objectama bu bir 3. parti modül kullanmaktır. Eğer n yıl biraz tarih oldu datetime (şu an için varsayarak) bilmek istiyorsanız, şunları yapabilirsiniz::

from dateutil.relativedelta import relativedelta

def yearsago(years, from_date=None):
    if from_date is None:
        from_date = datetime.now()
    return from_date - relativedelta(years=years)

Oldukça standart kütüphane ile sopa istiyorsanız, cevabı biraz daha karmaşık::

from datetime import datetime
def yearsago(years, from_date=None):
    if from_date is None:
        from_date = datetime.now()
    try:
        return from_date.replace(year=from_date.year - years)
    except:
        # Must be 2/29!
        assert from_date.month == 2 and from_date.day == 29 # can be removed
        return from_date.replace(month=2, day=28,
                                 year=from_date.year-years)

2/29, 18 yıl önce eğer 2/29, bu işlev 2/28 dönecektir yoktu. Oldukça 3/1, sadece değiştirmek okumak için return son deyimi dönmek isterseniz::

    return from_date.replace(month=3, day=1,
                             year=from_date.year-years)

Soru aslında biraz tarihten beri ne kadar zaman bilmek istediğini söyledi. Yıllık bir tamsayı istediğiniz varsayarsak, yılda 365.25 gün dayalı tahmin edebilirsiniz ve yearsago fonksiyonları yukarıda tanımlanan birini kullanarak kontrol edin::

def num_years(begin, end=None):
    if end is None:
        end = datetime.now()
    num_years = int((end - begin).days / 365.25)
    if begin > yearsago(num_years, end):
        return num_years - 1
    else:
        return num_years

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lifeisforsharingDT

    lifeisforsha

    18 Mayıs 2011
  • Maschine Tutorials

    Maschine Tut

    15 ŞUBAT 2011
  • RocketJump

    RocketJump

    22 ŞUBAT 2006