ডেটটাইম অবজেক্ট থেকে কীভাবে আমি পাইটজ টাইমজোনটি সরিয়ে ফেলতে পারি?


121

পিটজ ডেটটাইম অবজেক্ট থেকে টাইমজোনটি সরিয়ে ফেলার কি সহজ উপায় আছে?
যেমন এই উদাহরণ dtথেকে পুনর্গঠন dt_tz:

>>> import datetime
>>> import pytz
>>> dt = datetime.datetime.now()
>>> dt
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000)
>>> dt_tz = pytz.utc.localize(dt)
>>> dt_tz
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>)

উত্তর:


208

একটি ডেটটাইম অবজেক্ট থেকে টাইমজোন (tzinfo) অপসারণ করতে:

# dt_tz is a datetime.datetime object
dt = dt_tz.replace(tzinfo=None)

আপনি যদি তীরের মতো কোনও লাইব্রেরি ব্যবহার করছেন , তবে আপনি কেবলমাত্র একটি তীর বস্তুকে একটি ডেটটাইম অবজেক্টে রূপান্তর করে টাইমজোনটি সরাতে পারেন, তারপরে উপরের উদাহরণের মতো একই জিনিসটি করে।

# <Arrow [2014-10-09T10:56:09.347444-07:00]>
arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444, tzinfo=tzoffset(None, -25200))
tmpDatetime = arrowObj.datetime

# datetime.datetime(2014, 10, 9, 10, 56, 9, 347444)
tmpDatetime = tmpDatetime.replace(tzinfo=None)

কেন আপনি এই করবেন? একটি উদাহরণ হ'ল মাইএসকিউএলটি তার ডেটটাইম টাইপের সাথে টাইমজোনগুলিকে সমর্থন করে না। সুতরাং ওআরএম এর মতো স্ক্ল্যালেচেমি ব্যবহার করা সময় সময় অঞ্চলটি সরিয়ে ফেলবে যখন আপনি এটি datetime.datetimeডেটাবেজে সন্নিবেশ করার জন্য কোনও অবজেক্ট দেন। সমাধানটি হ'ল আপনার datetime.datetimeঅবজেক্টটিকে ইউটিসি তে রূপান্তর করা (তাই আপনার ডাটাবেসের সমস্ত কিছু ইউটিসি হওয়ায় এটি টাইমজোন নির্দিষ্ট করতে পারে না) তবে এটি ডাটাবেসে সন্নিবেশ করান (যেখানে টাইমজোনটি যেভাবেই সরানো হয়) অথবা নিজেই সরিয়ে ফেলুন। এছাড়াও মনে রাখবেন আপনি করতে পারবেন না তুলনা datetime.datetimeবস্তু এক যেখানে সময় অঞ্চল সচেতন এবং অন্য সময় অঞ্চল সাদাসিধা হয়।

##############################################################################
# MySQL example! where MySQL doesn't support timezones with its DATETIME type!
##############################################################################

arrowObj = arrow.get('2014-10-09T10:56:09.347444-07:00')

arrowDt = arrowObj.to("utc").datetime

# inserts datetime.datetime(2014, 10, 9, 17, 56, 9, 347444, tzinfo=tzutc())
insertIntoMysqlDatabase(arrowDt)

# returns datetime.datetime(2014, 10, 9, 17, 56, 9, 347444)
dbDatetimeNoTz = getFromMysqlDatabase()

# cannot compare timzeone aware and timezone naive
dbDatetimeNoTz == arrowDt # False, or TypeError on python versions before 3.3

# compare datetimes that are both aware or both naive work however
dbDatetimeNoTz == arrowDt.replace(tzinfo=None) # True
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.