के संबंध में साप्ताहिक टाइमडेल्टस को कैसे जोड़ें I स्थानीयकृत डेटाटाइम ऑब्जेक्ट्स में सप्ताह (या दिन या महीने या वर्ष) जोड़ना या घटाना चाहते हैं। समस्या यह है कि, निष्क्रिय दृष्टिकोण के परिणामस्वरूप डेलाइट सेविंग टाइमज़ोन के कारण 1 घंटे की शिफ्ट हो जाएगी।डेलाइट सेविंग टाइमज़ोन
2014-03-27 12:00 सर्दी से ग्रीष्मकालीन समय में स्विच से ठीक पहले है। यदि मैं इस तारीख को एक सप्ताह का टाइमडेल्टा जोड़ता हूं, उदाहरण के लिए टाइमज़ोन यूरोप/बर्लिन में स्थानीयकृत, परिणाम 2014-04-03 13:00 होगा। मैं दिन का एक ही घंटे, 2014-04-03 12:00 चाहता हूं। मुझे एक समाधान मिला:
from datetime import datetime, timedelta
import pytz
my_tz = pytz.timezone("Europe/Berlin")
def add_relativedelta(date, delta):
"""
Adds the given timedelta to the given date. Shifts in timezone offsets
will be removed.
"""
tz = date.tzinfo
result = tz.normalize(date + delta)
if result.utcoffset() != date.utcoffset():
result = tz.normalize(date.utcoffset() - result.utcoffset() + result)
return result
date = my_tz.localize(datetime(year=2014, month=3, day=27, hour=12, minute=0))
print """{} Original localized date (winter time)
{} One week later (summer time)
{} Date one week later preserving hour of day (summer time)""".format(date,
my_tz.normalize(date + timedelta(days=7)),
add_relativedelta(date, timedelta(days=7)))
2014-03-27 12:00:00+01:00 Original localized date (winter time)
2014-04-03 13:00:00+02:00 One week later (summer time)
2014-04-03 12:00:00+02:00 Date one week later preserving hour of day (summer time)
मैं सोच रहा था कि क्या अधिक सामान्य/बेहतर समाधान है। क्या कोई पुस्तकालय है जो इसे हल कर सकता है? यह एक बहुत आम मुद्दा प्रतीत होता है।