আমাকে কী করতে হবে
আমার একটি টাইমজোন-অজানা ডেটটাইম অবজেক্ট রয়েছে, যাতে এটির সাথে অন্যান্য টাইমজোন-সচেতন ডেটটাইম অবজেক্টের সাথে তুলনা করতে সক্ষম হওয়ার জন্য আমাকে একটি টাইম অঞ্চল যুক্ত করতে হবে। এই এক উত্তরাধিকারের মামলার জন্য আমি অজানা আমার পুরো অ্যাপ্লিকেশনটিকে সময় অঞ্চলকে রূপান্তর করতে চাই না।
আমি কি চেষ্টা করেছি
প্রথমে সমস্যাটি দেখানোর জন্য:
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import pytz
>>> unaware = datetime.datetime(2011,8,15,8,15,12,0)
>>> unaware
datetime.datetime(2011, 8, 15, 8, 15, 12)
>>> aware = datetime.datetime(2011,8,15,8,15,12,0,pytz.UTC)
>>> aware
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>)
>>> aware == unaware
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes
প্রথমত, আমি অ্যাসটাইমজোন চেষ্টা করেছি:
>>> unaware.astimezone(pytz.UTC)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime
>>>
এটি ব্যর্থ হয়ে অবাক হওয়ার কিছু নেই, কারণ এটি আসলে রূপান্তর করার চেষ্টা করে do প্রতিস্থাপনটি আরও ভাল পছন্দের মতো মনে হয়েছিল ( পাইথন অনুসারে: ডেটটাইম.টোডে () যা "টাইমজোন সচেতন"? ) এর একটি মূল্য কীভাবে পাওয়া যায়? ):
>>> unaware.replace(tzinfo=pytz.UTC)
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>)
>>> unaware == aware
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware datetimes
>>>
তবে আপনি দেখতে পাচ্ছেন, প্রতিস্থাপনটি tzinfo সেট করে বলে মনে হচ্ছে, তবে অবজেক্টটিকে সচেতন করবে না। আমি ইনপুট স্ট্রিংটি বিশ্লেষণের আগে টাইমজোন তৈরি করার জন্য ফিরে আসতে প্রস্তুত হয়েছি (যদি বিষয়টি গুরুত্বপূর্ণ হয় তবে আমি পার্সিংয়ের জন্য ডেটুটিল ব্যবহার করছি) তবে এটি অবিশ্বাস্যরূপে ক্লডজি বলে মনে হয়।
এছাড়াও, আমি একই ফলাফল সহ অজগর ২.6 এবং অজগর ২.7 উভয় ক্ষেত্রে চেষ্টা করেছি।
প্রসঙ্গ
আমি কিছু ডেটা ফাইলের জন্য পার্সার লিখছি। আমার একটি পুরানো ফর্ম্যাটটি সমর্থন করতে হবে যেখানে তারিখের স্ট্রিংয়ের সময় অঞ্চল নির্দেশক নেই। আমি ইতিমধ্যে ডেটা উত্স স্থির করেছি, তবে আমার এখনও উত্তরাধিকারের ডেটা ফর্ম্যাটটি সমর্থন করা দরকার। বিভিন্ন ব্যবসায়িক BS কারণে একসময় লিগ্যাসির ডেটা রূপান্তর করা কোনও বিকল্প নয়। সাধারণ অবস্থায়, আমি ডিফল্ট টাইমজোনটিকে হার্ড-কোডিংয়ের ধারণাটি পছন্দ করি না, এক্ষেত্রে এটি সেরা বিকল্প হিসাবে মনে হয়। আমি যুক্তিসঙ্গত আত্মবিশ্বাসের সাথে জানি যে প্রশ্নে থাকা সমস্ত উত্তরাধিকারের তথ্য ইউটিসিতে রয়েছে, সুতরাং আমি এই ক্ষেত্রে ডিফল্ট হওয়ার ঝুঁকি গ্রহণ করতে প্রস্তুত accept
import datetime; datetime.datetime.now(datetime.timezone.utc)
tz
আরও পড়ার জন্য ব্যবহার করব :datetime.datetime.now(tz=datetime.timezone.utc)
unaware.replace()
None
এটি যদি স্থানে থাকাunaware
বস্তুটি সংশোধন করে তবে ফিরে আসত । আরপিএল দেখায় যে এখানে.replace()
একটি নতুনdatetime
অবজেক্ট প্রদান করে।