পাইথনে যে "টাইমজোন সচেতন" তা কীভাবে আমি ডেটটাইম.today () এর মান পাব?


310

আমি কত তারিখের datetime.today()কিছু আগে ছিল তা গণনা করার জন্য একটি তারিখের মান থেকে বিয়োগের চেষ্টা করছি । তবে এটি অভিযোগ করেছে:

TypeError: can't subtract offset-naive and offset-aware datetimes

মানটি datetime.today()"টাইমজোন সচেতন" বলে মনে হচ্ছে না, যদিও আমার অন্যান্য তারিখের মান। datetime.today()টাইমজোন সচেতন তা কীভাবে আমি একটি মান পেতে পারি ?

এখনই, এটি আমাকে স্থানীয় সময় দিচ্ছে, যা পিএসটি, অর্থাৎ ইউটিসি - ৮ ঘন্টা হতে পারে to সবচেয়ে খারাপ ক্ষেত্রে, আমি কীভাবে নিজে datetimeফিরে আসা অবজেক্টটিতে টাইমজোন মানটি প্রবেশ করতে datetime.today()এবং এটি ইউটিসি -8 এ সেট করতে পারি?

অবশ্যই, সময়যুক্ত সময়টি স্বয়ংক্রিয়ভাবে জানার জন্য আদর্শ সমাধানটি হবে।



10
দেখে মনে হচ্ছে আমরা datetime.now().astimezone()পাইথন ৩.6
johnchen902

উত্তর:


362

স্ট্যান্ডার্ড লাইব্রেরিতে, আপনার নিজস্ব সময় অঞ্চল শ্রেণি তৈরি না করে সচেতন সময় অঞ্চল তৈরি করার কোনও ক্রস প্ল্যাটফর্ম উপায় নেই।

উইন্ডোজে, win32timezone.utcnow()তবে এটি পাইউইন 32 এর অংশ। আমি বরং পাইটজ লাইব্রেরিটি ব্যবহার করার পরামর্শ দেব , যার বেশিরভাগ সময় অঞ্চলগুলির ক্রমাগত আপডেট হওয়া ডাটাবেস রয়েছে has

স্থানীয় সময় অঞ্চলগুলির সাথে কাজ করা খুব জটিল হতে পারে (নীচে "আরও পড়ার" লিঙ্কগুলি দেখুন), তাই আপনি বরং আপনার অ্যাপ্লিকেশন জুড়ে ইউটিসি ব্যবহার করতে চাইতে পারেন, বিশেষত দুটি টাইম পয়েন্টের মধ্যে পার্থক্য গণনার মতো পাটিগণিত ক্রিয়াকলাপগুলির জন্য।

আপনি বর্তমান তারিখ / সময় এর মতো পেতে পারেন:

import pytz
from datetime import datetime
datetime.utcnow().replace(tzinfo=pytz.utc)

এটি মনে করুন datetime.today()এবং ইউটিসি সময় নয়, স্থানীয় সময়টি datetime.now()ফিরিয়ে দিন , সুতরাং তাদের কাছে আবেদন করা সঠিক হবে না।.replace(tzinfo=pytz.utc)

এটি করার আরেকটি দুর্দান্ত উপায় হ'ল:

datetime.now(pytz.utc)

যা কিছুটা খাটো এবং একই কাজ করে।


আরও পড়ুন / দেখছেন কেন অনেক ক্ষেত্রে ইউটিসি পছন্দ করবেন:


75
datetime.now(pytz.utc)তার বদলে কেমন হয় datetime.utcnow().replace(tzinfo = pytz.utc)?
ইউরোইরো

5
now(utc)আজ ফিরে আসবে না (এটি যদি ইউটিসির মধ্যরাত না হয়), এটি ইউটিসিতে বর্তমান সময়টি ফেরত দেয়। এছাড়াও আপনি প্রয়োজন .replace(hour=0, minute=0, ...)(যেমন দিনের শুরুতে পেতে datetime.today())
JFS

1
ডক্স বলে today()আয় বর্তমান সময় না মধ্যরাত। যদি মধ্যরাতের প্রয়োজন হয় এমন কোনও ব্যবহারের কেস থাকে তবে হ্যাঁ, প্রতিস্থাপনটি সেই অনুযায়ী করা দরকার। যেহেতু মূল প্রশ্নটি তারিখের সময় পার্থক্য সম্পর্কে ছিল, তাই আমি মনে করি না যে মধ্যরাতের প্রয়োজন।
অ্যান্ডিডগ

1
@AndiDog: আমার মন্তব্য যে বোঝা আমি ভেবেছিলাম (ভুলক্রমে) যে datetime.today()হয় combine(date.today(), time())datetimeউভয় .now()এবং .today()পদ্ধতি রয়েছে (যেমন আপনি সঠিকভাবে নির্দেশ করেছেন) একই জিনিসটি ফিরে আসে (প্রায়)। কোন date.now()পদ্ধতি নেই। dateএবং datetimeঅবজেক্টগুলি বিনিময়যোগ্য নয়। অবজেক্টের পরিবর্তে ডেটটাইম অবজেক্ট ব্যবহার করা dateসূক্ষ্ম বাগ তৈরি করতে পারে; datetime.today()এটির নিকটবর্তী সদৃশ হলে অস্তিত্বের কোনও কারণ আমি দেখতে পাচ্ছি না datetime.now()
jfs

6
এই উত্তরে যোগ করা, আপনি যদি জ্যাঙ্গো ব্যবহার করছেন বলে মনে হয় তবে সর্বদা এটির timezone.now()পরিবর্তে datetime.now()ব্যবহার করুন যদি এটি ইউটিসি স্বয়ংক্রিয়ভাবে ব্যবহার করে তবে USE_TZ = Truetimezoneএ লোকেটিং হয় django.utils.timezoneডকুমেন্টেশন,: docs.djangoproject.com/en/1.11/topics/i18n/timezones
রায়ান

107

একটি নির্দিষ্ট টাইম জোনে বর্তমান সময় পান:

import datetime
import pytz
my_date = datetime.datetime.now(pytz.timezone('US/Pacific'))

2
এই দেখুন ।
wim

1
আউটপুট ব্যতীত আপনার স্থানীয় সময় ব্যবহার করা উচিত নয়। টাইমজোন ভিত্তিক ডেটটাইম ব্যবহার করার সময় অনেক কিছুই ভুল হয়ে যায়: আপনি যখন ইউটিসি সময় না শুরু করেন সেক্ষেত্রে একটি সাধারণ টাইম ডেল্টা দিবালোকের সংরক্ষণ গ্রহণ করে না। সর্বদা ইউটিসির উপর ভিত্তি করে টাইমজোন সচেতন করুন। প্রয়োজনে আউটপুট এ স্থানীয় সময় অঞ্চল রূপান্তর করুন।
মিঃ

4
@ এমআরই এর সাথে মতবিরোধের পুনরাবৃত্তি করার জন্য যা আমি গ্রহণযোগ্য উত্তরের মন্তব্যে এর আগে বলেছিলাম: স্থানীয়করণের তারিখের সময় নিয়ে কাজ করার সঠিক বৈধ কারণ রয়েছে এবং "আউটপুট ব্যতীত আপনার স্থানীয় সময় ব্যবহার করা উচিত নয়" অত্যধিক বিস্তৃত পরামর্শ is ধরুন আপনি ডালাইট সেভিংস সীমানার কয়েক ঘন্টা আগে ঘড়িগুলি এক ঘন্টা পিছনে ফিরে যাওয়ার আগে ডেটটাইমে 1 দিন যোগ করছেন। আপনি কি ফলাফল চান? আপনি যদি সময়টি একই রকম মনে করেন তবে স্থানীয়করণের তারিখের সময় ব্যবহার করুন। আপনি যদি মনে করেন এটি এক ঘন্টা আগে হওয়া উচিত, ইউটিসি বা টাইমজোন-সাদামাটা তারিখের সময়গুলি ব্যবহার করুন। যা বোঝায় তা ডোমেন-নির্ভর।
মার্ক আমেরিকা

@ মারক্যামেরি যতটা আমি সম্মতি জানাতে পারি যে আপনি অনেক দিন বা ঘন্টা সংযোজন করতে পারেন বা টাইমজোন ইস্যুগুলি (যেমন আপনার উদাহরণস্বরূপ) যত্ন নিচ্ছেন না, এই মন্তব্যটি ক্লায়েন্টের সাথে সময় অঞ্চল সংশোধিত সময় পার হওয়ার সাথে সম্পর্কিত। পাইথন যেহেতু প্রাথমিকভাবে ব্যাক-এন্ড প্রক্রিয়াগুলির জন্য ব্যবহৃত হয়, তাই এটি ক্লায়েন্টের কাছে সময় পার করে। ইউটিসি-তে সার্ভারের সর্বদা তারিখ / সময় পাস করা উচিত এবং ক্লায়েন্টটিকে এটিকে তার নিজস্ব স্থানীয় তারিখ / সময় / datetime.datetime(2016, 11, 5, 9, 43, 45, tzinfo=pytz.timezone('US/Pacific'))
টাইমজোনতে

"সার্ভারের সর্বদা ইউটিসিতে তারিখ / সময় পাস করা উচিত এবং ক্লায়েন্টকে এটিকে তার নিজস্ব স্থানীয় তারিখ / সময় / সময় অঞ্চল হিসাবে রূপান্তর করা উচিত" - না, এটি সর্বজনীন সত্য নয়। কখনও কখনও ক্লায়েন্টের টাইমজোন ব্যবহার করা অনুচিত এবং উপযুক্ত টাইমজোনটি ডেটার অংশ হিসাবে প্রেরণ করা প্রয়োজন। আমি যদি লন্ডন হিসাবে সান ফ্রান্সিসকো দাবা ক্লাবের সভাগুলির ওয়েবসাইটটি তাদের ওয়েবসাইটে দেখি তবে আমার সেগুলি লন্ডনের সময় নয়, সান ফ্রান্সিসকো সময়ে দেখা উচিত।
মার্ক আমেরিকা

69

পাইথন 3-তে, স্ট্যান্ডার্ড লাইব্রেরিটি ইউটিসিকে টাইমজোন হিসাবে উল্লেখ করা আরও সহজ করে তোলে:

>>> import datetime
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2016, 8, 26, 14, 34, 34, 74823, tzinfo=datetime.timezone.utc)

আপনি যদি এমন কোনও সমাধান চান যা কেবলমাত্র স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে এবং এটি পাইথন 2 এবং পাইথন 3 উভয় ক্ষেত্রেই কাজ করে তবে jfs এর উত্তর দেখুন

আপনার যদি ইউটিসি নয়, স্থানীয় সময় অঞ্চল প্রয়োজন হয়, তবে মিহাই ক্যাপোটির উত্তর দেখুন


19

পাইথন 2 এবং 3 উভয় ক্ষেত্রেই কাজ করে এমন একটি স্টাডলিব সমাধান:

from datetime import datetime

now = datetime.now(utc) # Timezone-aware datetime.utcnow()
today = datetime(now.year, now.month, now.day, tzinfo=utc) # Midnight

যেখানে todayএকটি সচেতন utcডেটটাইম উদাহরণটি ইউটিসিতে দিনের শুরু (মধ্যরাত) উপস্থাপন করে এবং একটি tzinfo অবজেক্ট ( ডকুমেন্টেশন থেকে উদাহরণ ):

from datetime import tzinfo, timedelta

ZERO = timedelta(0)

class UTC(tzinfo):
    def utcoffset(self, dt):
        return ZERO

    def tzname(self, dt):
        return "UTC"

    def dst(self, dt):
        return ZERO

utc = UTC()

সম্পর্কিত: প্রদত্ত ইউটিসি সময়ের জন্য মধ্যরাত (দিনের শুরু) পাওয়ার বেশ কয়েকটি উপায়ের পারফরম্যান্স তুলনা । দ্রষ্টব্য: একটি অ-স্থির ইউটিসি অফসেটের সাথে টাইম জোনের জন্য মধ্যরাত পাওয়ার জন্য এটি আরও জটিল ।


16

টাইম জোন সচেতন তারিখ সময় অবজেক্ট বর্তমান সময়কে উপস্থাপন করার জন্য আরেকটি পদ্ধতি:

import datetime
import pytz

pytz.utc.localize( datetime.datetime.utcnow() )  

নোট করুন pytz.utcএবং pytz.UTCউভয়ই সংজ্ঞায়িত (এবং একই)
ড্রেভিকো

2
এই উত্তরটি গৃহীত এক বেশী ভালো যেহেতু এটি আরো সার্বজনীন হল: replace()ing সময় অঞ্চল সাধারণত ত্রুটি-প্রবণ সবচেয়ে অন্য ব্যবহারের মধ্যে, যখন localize()ING সাদাসিধা টাইমস্ট্যাম্প করার সময় অঞ্চল বরাদ্দ পছন্দের উপায়।
অ্যান্টনি হ্যাচকিন্স

@ অ্যান্টনি হ্যাচকিনস: .localize()পদ্ধতিটি অস্পষ্ট স্থানীয় সময়গুলির জন্য ব্যর্থ হয় (নন-ইউটিসি ইনপুট)। @ ফিলফ্রেওর উত্তর যা ব্যবহার করে.now(pytz_timezone) এমন ক্ষেত্রে কাজ চালিয়ে যায়।
jfs

পাইথন ডক্সে উল্লিখিত হিসাবে .now(pytz_timezone)ঠিক একই রকম হয় localize(utcnow)- প্রথমে এটি ইউটিসিতে বর্তমান সময় উত্পন্ন করে, তারপরে এটি একটি সময় অঞ্চল নির্ধারণ করে: "<...> এই ক্ষেত্রে ফলাফলটি সমান tz.fromutc(datetime.utcnow().replace(tzinfo=tz))"। উভয় উত্তর সঠিক এবং সর্বদা কাজ করে।
অ্যান্টনি হ্যাচকিন্স

1
নিরাপদ টাইমজোনকে সচেতন করে তোলা যায় এমন একমাত্র নিষ্পাপ (নন-ইউটিসি) সময় এখন : অন্তর্নিহিত সিস্টেমটি ইউটিসি মান জানতে পারে এবং pytzওলসন ডিবি-র মাধ্যমে এটি পৃথিবীর যে কোনও টাইমজোনতে রূপান্তর করা যায় তা জানা উচিত। দিবালোক সংরক্ষণ শিফ্টের সময় অস্পষ্টতার কারণে অন্য কোনও নিষ্পাপ (নন-ইউটিসি) টাইমজোনকে সচেতন করা কঠিন। এটি কোনও সমস্যা নয় .localize(এটিকে একটি is_dstমান খাওয়ানো কোনও তারিখের জন্য কার্যকর করে তোলে)। এটি দিবালোক সংরক্ষণ অনুশীলনের অন্তর্নিহিত সমস্যা।
অ্যান্টনি হ্যাচকিন্স

16

পাইথন ৩.৩ দিয়ে শুরু করে কেবল স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে একটি ওয়ান-লাইনার কাজ করে। আপনি স্থানীয় সময় অঞ্চল জাগ্রতdatetime অবজেক্টটি ব্যবহার করে astimezone( johnchen902 দ্বারা প্রস্তাবিত হিসাবে ) পেতে পারেন:

from datetime import datetime, timezone

aware_local_now = datetime.now(timezone.utc).astimezone()

print(aware_local_now)
# 2020-03-03 09:51:38.570162+01:00

print(repr(aware_local_now))
# datetime.datetime(2020, 3, 3, 9, 51, 38, 570162, tzinfo=datetime.timezone(datetime.timedelta(0, 3600), 'CET'))

2
ডকুমেন্টেশন একটি বড় সহায়তা, এখানে পাওয়া যায়: ডকস.পিথন.আর. / ৮.৮ / লাইব্রেরি / । কার্যক্ষমতার এই অবিশ্বাস্যরূপে বেসিক টুকরোটি ডক্সের একটি অস্পষ্ট অনুচ্ছেদে গভীরভাবে সমাহিত করা হয়েছে, যাতে এই স্ট্যাকওভারফ্লো উত্তরটি এই তথ্য সহ পুরো ইন্টারনেটে কার্যকরভাবে একমাত্র স্থান হয়। ডকুমেন্টেশনে এটি আরও দেখা যায় যেহেতু পাইথন ৩.6 থেকে datetime.now()কোনও যুক্তি ছাড়াই ডেকে ডাকা যাবে এবং সঠিক স্থানীয় ফলাফলটি ফিরিয়ে আনা যাবে (ভোলা datetimeলোকেরা স্থানীয় সময় অঞ্চলে বলে মনে করা হয়)।
এতিমহোল্ট

8

আপনি যদি জ্যাঙ্গো ব্যবহার করছেন , আপনি তারিখগুলি নন-টিজেড সচেতন (কেবলমাত্র ইউটিসি ) সেট করতে পারেন ।

সেটিংস.পিতে নিম্নলিখিত লাইনটি মন্তব্য করুন:

USE_TZ = True

8
আপনি কোথায় এই প্রশ্নে উল্লিখিত জাঙ্গো দেখতে পেলেন?
ভনপেট্রেশেভ

1
কিছু সদয় আত্মা আমার আগের মন্তব্য-ক্ষমা এখানে মুছে ফেলেছে, তাই আবার: আমার জন্য লজ্জা, প্রশ্নটি ভুল উত্তর হিসাবে জ্যাঙ্গো-নির্দিষ্ট নয়। আমি এটি রেখেছি কারণ এটি কোনও কোনও ব্যবহারকারীকে যাইহোক সহায়তা করতে পারে তবে স্কোর 0 এ পৌঁছানোর পরে আমি এটি মুছে ফেলব যদি এই উত্তরটি অনুপযুক্ত হয় তবে নিচে বিনা দ্বিধায় থাকুন।
লাফস্টে

6

pytz হল একটি পাইথন লাইব্রেরি যা পাইথন ২.৩ বা তারও বেশি উচ্চতর ব্যবহার করে সঠিক এবং ক্রস প্ল্যাটফর্মের সময় অঞ্চল গণনার অনুমতি দেয়।

Stdlib দিয়ে, এটি সম্ভব নয়।

উপর একটি অনুরূপ প্রশ্ন দেখতে পাবেন তাই


6

Stdlib দিয়ে এটি উত্পন্ন করার একটি উপায় এখানে:

import time
from datetime import datetime

FORMAT='%Y-%m-%dT%H:%M:%S%z'
date=datetime.strptime(time.strftime(FORMAT, time.localtime()),FORMAT)

তারিখটি স্থানীয় তারিখ এবং ইউটিসি থেকে অফসেট সংরক্ষণ করবে , ইউটিসি টাইমজোন-এ তারিখ নয়, সুতরাং তারিখটি কোন টাইমজোনটি উত্পন্ন হবে তা সনাক্ত করার প্রয়োজন হলে আপনি এই সমাধানটি ব্যবহার করতে পারেন । এই উদাহরণে এবং আমার স্থানীয় সময় অঞ্চলে:

date
datetime.datetime(2017, 8, 1, 12, 15, 44, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))

date.tzname()
'UTC+02:00'

%zউত্পন্ন সময় কাঠামোর ইউটিসি অফসেট নির্দেশ করতে কীটি উপস্থাপনের ফর্ম্যাটটিতে নির্দেশ যুক্ত করছে। ডেটটাইম মডিউলে অন্যান্য উপস্থাপনের ফর্ম্যাটগুলির সাথে পরামর্শ করা যেতে পারে ডক্স

আপনার যদি ইউটিসি টাইমজোনটিতে তারিখের প্রয়োজন হয় তবে আপনি টাইম.মোকালটাইম () কে টাইম.gm টাইম () এর সাথে প্রতিস্থাপন করতে পারেন

date=datetime.strptime(time.strftime(FORMAT, time.gmtime()),FORMAT)

date    
datetime.datetime(2017, 8, 1, 10, 23, 51, tzinfo=datetime.timezone.utc)

date.tzname()
'UTC'

সম্পাদন করা

এটি কেবল অজগর 3 এ কাজ করে । Z নির্দেশটি পাইথন 2 _strptime.py কোডে উপলভ্য নয়


ValueError: 'জেড' ফর্ম্যাটে একটি খারাপ নির্দেশ হল '% Y-% এম% DT% এইচ:% এম:% s% z- র'
jno

আপনি অজগর 2 এ আছেন, তাই না? দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে যে z নির্দেশটি পাইথন ২ তে উপলভ্য নয় _ _রিস্টটাইম.পি কোড
jcazor

6

পাইথনের ডেটটাইম.ডেটটাইম.নো () তে বর্ণিত ডেটুটিল ব্যবহার করুন যা টাইমজোন সচেতন :

from dateutil.tz import tzlocal
# Get the current date/time with the timezone.
now = datetime.datetime.now(tzlocal())

1
এমন পরিস্থিতির জন্য জেএফ সেবাস্তিয়ানের এই উত্তরটি দেখুন যেখানে এটি ভুল ফলাফল দেয়।
অ্যান্টনি হ্যাচকিন্স

2
আমি মনে করি যে অন্য পোস্টে ত্রুটিটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে কেবল প্রাসঙ্গিক। tzlocal()ফাংশন এখনও সহজ সমাধান এক এবং স্পষ্টভাবে এখানে উল্লেখ করতে হবে।
ব্যবহারকারী 8162

স্বীকৃত উত্তর হওয়া উচিত, আইএমএইচও
dmitry_romanov

2

একটি সময় অঞ্চল সচেতন তারিখ প্রাপ্ত utc পাওয়া কাজ করার তারিখ বিয়োগের জন্য যথেষ্ট।

তবে আপনি যদি আপনার বর্তমান টাইম জোনে টাইমজোন-সচেতনতার তারিখ চান, tzlocalতবে যাওয়ার উপায়:

from tzlocal import get_localzone  # pip install tzlocal
from datetime import datetime
datetime.now(get_localzone())

পিএসের dateutilএকটি অনুরূপ ফাংশন রয়েছে ( dateutil.tz.tzlocal)। তবে নামটি ভাগ করে নেওয়ার সাথে সাথে এর সম্পূর্ণ ভিন্ন কোড বেস রয়েছে, যা জেএফ সেবাস্তিয়ান দ্বারা উল্লিখিত হিসাবে ভুল ফলাফল দিতে পারে।


অজগর সাধারণত সার্ভারে ব্যবহৃত হয়। সার্ভারে স্থানীয় সময় অঞ্চলটি সাধারণত অর্থহীন এবং সর্বদা ইউটিসিতে সেট করা উচিত। ডেটটাইম tzinfo এইভাবে সেট করা কিছু ক্ষেত্রে ব্যর্থ। ইউটিসি আরও ভাল ব্যবহার করুন, তারপরে কেবলমাত্র আউটপুটটিতে পছন্দসই টাইমজোনকে স্থানীয়করণ করুন। উদাহরণস্বরূপ যে কোনও টাইমডেল্টা গণনা দিবালোক সংরক্ষণকে বিবেচনা করে না, সুতরাং এটি ইউটিসি-তে করা উচিত, তারপরে স্থানীয়করণ করা উচিত।
মিঃ

@ মিঃ ভুল, অফটপিক, উদাহরণ?
অ্যান্টনি হ্যাচকিন্স

একটি ডেটটাইম অবজেক্টকে একটি টাইমজোনে স্থানীয় করার জন্য চেষ্টা করুন যা দিবালোক সংরক্ষণ পর্যবেক্ষণ করে, দিবালোক সংরক্ষণের অবস্থা পরিবর্তন করতে কয়েক দিন যোগ করে, এবং আপনি দেখতে পাবেন স্থানীয়করণের সময় অঞ্চলটিতে ডেটটাইম অবজেক্টগুলিতে অপারেশন ব্যর্থ হয় এবং দিবালোক সংরক্ষণকে সম্মান করে না। অতএব আমার মন্তব্য যে আপনাকে সর্বদা ইউটিসি সময়ে যে কোনও ডেটটাইম অপারেশন করা উচিত।
মিঃ

পয়েন্টটি হ'ল: এটি করবেন না, ইউটিসি-তে আপনার ক্রিয়াকলাপগুলি করুন এবং তারপরে আউটপুটটিতে স্থানীয় সময় জোনে রূপান্তর করতে ডেটটাইম.অ্যাসটাইমজোন (টাইমজোন) ব্যবহার করুন।
মিঃ

2

এখানে একটি পঠনযোগ্য টাইমজোন ব্যবহার করে একটি সমাধান দেওয়া হয়েছে এবং এটি আজ () এর সাথে কাজ করে:

from pytz import timezone

datetime.now(timezone('Europe/Berlin'))
datetime.now(timezone('Europe/Berlin')).today()

আপনি নীচে সমস্ত সময় অঞ্চল তালিকাভুক্ত করতে পারেন:

import pytz

pytz.all_timezones
pytz.common_timezones # or

1

বিশেষত ইউটিসি নন-টাইমজোনগুলির জন্য:

একমাত্র টাইমজোন যার নিজস্ব পদ্ধতি রয়েছে timezone.utcতবে আপনি যদি কোনও ইউটিসি অফসেটের সাথে টাইমজোনটি ফ্যাজ করতে পারেন তবে আপনার যদি প্রয়োজন হয় timedelta& ব্যবহার করে timezoneএবং জোর করে ব্যবহার করে .replace

In [1]: from datetime import datetime, timezone, timedelta

In [2]: def force_timezone(dt, utc_offset=0):
   ...:     return dt.replace(tzinfo=timezone(timedelta(hours=utc_offset)))
   ...:

In [3]: dt = datetime(2011,8,15,8,15,12,0)

In [4]: str(dt)
Out[4]: '2011-08-15 08:15:12'

In [5]: str(force_timezone(dt, -8))
Out[5]: '2011-08-15 08:15:12-08:00'

timezone(timedelta(hours=n))সময় অঞ্চল হিসাবে ব্যবহার করা এখানে আসল রূপার বুলেট এবং এতে প্রচুর অন্যান্য দরকারী অ্যাপ্লিকেশন রয়েছে।


0

যদি আপনি পাইথনে বর্তমান সময় এবং তারিখ পান তবে তারিখ এবং সময় আমদানি করুন, পাইথজ প্যাকেজ পাইথনের পরে আপনি বর্তমান তারিখ এবং সময় পাবেন ঠিক তেমন ..

from datetime import datetime
import pytz
import time
str(datetime.strftime(datetime.now(pytz.utc),"%Y-%m-%d %H:%M:%S%t"))

0

আমার মনে আরও একটি বিকল্প, এর Pendulumপরিবর্তে ব্যবহার করছে pytz। নিম্নলিখিত সহজ কোড বিবেচনা করুন:

>>> import pendulum

>>> dt = pendulum.now().to_iso8601_string()
>>> print (dt)
2018-03-27T13:59:49+03:00
>>>

পেন্ডুলাম ইনস্টল করতে এবং তাদের ডকুমেন্টেশনগুলি দেখতে এখানে যান । এটিতে প্রচুর বিকল্প রয়েছে (যেমন সরল আইএসওআই 6060, আরএফসি 3339 এবং আরও অনেকের ফর্ম্যাট সমর্থন), আরও ভাল পারফরম্যান্স এবং সহজ কোড পাওয়া যায়।


এখানে কেন ভোট নেমেছে তা নিশ্চিত নন, এই কোডটি একাধিক প্রোগ্রামে কাজ করছে যা আমার জন্য //২৪ চালায় :)। আমি অন্য মতামত মনে করি না, তবে দয়া করে বলুন কেন এটি আপনার পক্ষে কাজ করছে না, আমাকে এটি পরীক্ষা করার অনুমতি দেওয়ার জন্য। অগ্রিম ধন্যবাদ
এনজি 10

0

টাইমজোন-সচেতন তারিখের সময়ের জন্য নীচে প্রদর্শিত সময় অঞ্চলটি ব্যবহার করুন। ডিফল্টটি ইউটিসি:

from django.utils import timezone
today = timezone.now()

0

'হাউচু' থেকে টাইলার একটি দুর্দান্ত নিবন্ধ তৈরি করেছিল যা আমাকে ডেটটাইম অবজেক্টগুলি সম্পর্কে আরও ভাল ধারণা পেতে সহায়তা করেছে, নীচের লিঙ্কে

ডেটটাইম নিয়ে কাজ করা

মূলত, আমি আমার ডেটটাইম অবজেক্টের শেষের জন্য কেবল নিম্নলিখিতটি যুক্ত করেছি

.replace(tzinfo=pytz.utc)

উদাহরণ:

import pytz
import datetime from datetime

date = datetime.now().replace(tzinfo=pytz.utc)

0

পিএনপি_ডেটটাইম ব্যবহার করে দেখুন , সমস্ত সময় ব্যবহৃত হয়েছে এবং ফিরে এসেছে টাইমজোন সহ, এবং কোনও অফসেট-সাদাসিধা এবং অফসেট-সচেতন সমস্যা সৃষ্টি করবে না।

>>> from pnp_datetime.pnp_datetime import Pnp_Datetime
>>>
>>> Pnp_Datetime.utcnow()
datetime.datetime(2020, 6, 5, 12, 26, 18, 958779, tzinfo=<UTC>)

0

এটি জোর দেওয়া উচিত যে পাইথন ৩.6 থেকে আপনার স্থানীয় সময় (আপনার OS এর সেটিং) উপস্থাপনকারী টাইমজোন সচেতন ডেটটাইম অবজেক্টটি পেতে কেবলমাত্র স্ট্যান্ডার্ড লাইব প্রয়োজন। অ্যাসটাইমজোন () ব্যবহার করে

import datetime

datetime.datetime(2010, 12, 25, 10, 59).astimezone()
# e.g.
# datetime.datetime(2010, 12, 25, 10, 59, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600), 'Mitteleuropäische Zeit'))

datetime.datetime(2010, 12, 25, 12, 59).astimezone().isoformat()
# e.g.
# '2010-12-25T12:59:00+01:00'

# I'm on CET/CEST

(@ জনচেন 902 এর মন্তব্য দেখুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.