जवाबों:
समयबद्धता वस्तुओं का उपयोग करके वृद्धि की तिथियां पूरी की जा सकती हैं:
import datetime
datetime.datetime.now() + datetime.timedelta(days=1)
पायथन डॉक्स में समयबद्ध वस्तुओं को देखें: http://docs.python.org/library/datetime.html
यहाँ डेटुतिल के रिलेटिडेल्टा का उपयोग करके तारीख पर दिन जोड़ने की एक और विधि है।
from datetime import datetime
from dateutil.relativedelta import relativedelta
print 'Today: ',datetime.now().strftime('%d/%m/%Y %H:%M:%S')
date_after_month = datetime.now()+ relativedelta(day=1)
print 'After a Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')
आउटपुट:
आज: 25/06/2015 20:41:44
एक दिन के बाद: 01/06/2015 20:41:44
timedelta()
stdlib के बजाय इसका उपयोग क्यों करेंगे ?
वर्तमान जवाबों के सभी कुछ मामलों में गलत हैं क्योंकि वे यह नहीं मानते हैं कि टाइमज़ोन यूटीसी के सापेक्ष अपने ऑफसेट को बदलते हैं। इसलिए कुछ मामलों में 24 घंटों को जोड़ना कैलेंडर के दिन को जोड़ने से अलग है।
निम्नलिखित समाधान समोआ के लिए काम करता है और स्थानीय समय को स्थिर रखता है।
def add_day(today):
"""
Add a day to the current day.
This takes care of historic offset changes and DST.
Parameters
----------
today : timezone-aware datetime object
Returns
-------
tomorrow : timezone-aware datetime object
"""
today_utc = today.astimezone(datetime.timezone.utc)
tz = today.tzinfo
tomorrow_utc = today_utc + datetime.timedelta(days=1)
tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour,
minute=today.minute,
second=today.second)
return tomorrow_utc_tz
# core modules
import datetime
# 3rd party modules
import pytz
# add_day methods
def add_day(today):
"""
Add a day to the current day.
This takes care of historic offset changes and DST.
Parameters
----------
today : timezone-aware datetime object
Returns
-------
tomorrow : timezone-aware datetime object
"""
today_utc = today.astimezone(datetime.timezone.utc)
tz = today.tzinfo
tomorrow_utc = today_utc + datetime.timedelta(days=1)
tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
tomorrow_utc_tz = tomorrow_utc_tz.replace(hour=today.hour,
minute=today.minute,
second=today.second)
return tomorrow_utc_tz
def add_day_datetime_timedelta_conversion(today):
# Correct for Samoa, but dst shift
today_utc = today.astimezone(datetime.timezone.utc)
tz = today.tzinfo
tomorrow_utc = today_utc + datetime.timedelta(days=1)
tomorrow_utc_tz = tomorrow_utc.astimezone(tz)
return tomorrow_utc_tz
def add_day_dateutil_relativedelta(today):
# WRONG!
from dateutil.relativedelta import relativedelta
return today + relativedelta(days=1)
def add_day_datetime_timedelta(today):
# WRONG!
return today + datetime.timedelta(days=1)
# Test cases
def test_samoa(add_day):
"""
Test if add_day properly increases the calendar day for Samoa.
Due to economic considerations, Samoa went from 2011-12-30 10:00-11:00
to 2011-12-30 10:00+13:00. Hence the country skipped 2011-12-30 in its
local time.
See https://stackoverflow.com/q/52084423/562769
A common wrong result here is 2011-12-30T23:59:00-10:00. This date never
happened in Samoa.
"""
tz = pytz.timezone('Pacific/Apia')
today_utc = datetime.datetime(2011, 12, 30, 9, 59,
tzinfo=datetime.timezone.utc)
today_tz = today_utc.astimezone(tz) # 2011-12-29T23:59:00-10:00
tomorrow = add_day(today_tz)
return tomorrow.isoformat() == '2011-12-31T23:59:00+14:00'
def test_dst(add_day):
"""Test if add_day properly increases the calendar day if DST happens."""
tz = pytz.timezone('Europe/Berlin')
today_utc = datetime.datetime(2018, 3, 25, 0, 59,
tzinfo=datetime.timezone.utc)
today_tz = today_utc.astimezone(tz) # 2018-03-25T01:59:00+01:00
tomorrow = add_day(today_tz)
return tomorrow.isoformat() == '2018-03-26T01:59:00+02:00'
to_test = [(add_day_dateutil_relativedelta, 'relativedelta'),
(add_day_datetime_timedelta, 'timedelta'),
(add_day_datetime_timedelta_conversion, 'timedelta+conversion'),
(add_day, 'timedelta+conversion+dst')]
print('{:<25}: {:>5} {:>5}'.format('Method', 'Samoa', 'DST'))
for method, name in to_test:
print('{:<25}: {:>5} {:>5}'
.format(name,
test_samoa(method),
test_dst(method)))
Method : Samoa DST
relativedelta : 0 0
timedelta : 0 0
timedelta+conversion : 1 0
timedelta+conversion+dst : 1 1
tzinfo == None
) डेटाटाइम के साथ काम करते समय पूरी तरह से ठीक हैं ।
आप टाइमडेलटा भी आयात कर सकते हैं इसलिए कोड क्लीनर है।
from datetime import datetime, timedelta
date = datetime.now() + timedelta(seconds=[delta_value])
फिर तारीख को स्ट्रिंग में परिवर्तित करें
date = date.strftime('%Y-%m-%d %H:%M:%S')
अजगर एक लाइनर है
date = (datetime.now() + timedelta(seconds=[delta_value])).strftime('%Y-%m-%d %H:%M:%S')
पुस्तकालयों के बिना एक छोटा समाधान। :)
d = "8/16/18"
day_value = d[(d.find('/')+1):d.find('/18')]
tomorrow = f"{d[0:d.find('/')]}/{int(day_value)+1}{d[d.find('/18'):len(d)]}".format()
print(tomorrow)
# 8/17/18
सुनिश्चित करें कि " स्ट्रिंग डी " वास्तव में इस प्रकार है %m/%d/%Y
कि आपको एक महीने से अगले महीने तक संक्रमण की समस्या नहीं होगी।
d
लिए सेट 8/31/18
तो यह रिटर्न 8/32/18
। यदि आप वर्ष को बदलते हैं 18
, तो यह टूट जाता है।