मुझे Python में datetime.today () का मान कैसे मिलता है जो "टाइमजोन अवगत" है?


310

मैं datetime.today()गणना करने के मूल्य से एक तारीख मूल्य को घटाने की कोशिश कर रहा हूं कि कुछ समय पहले कितना था। लेकिन यह शिकायत करता है:

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

मान datetime.today()"टाइमज़ोन जागरूक" प्रतीत नहीं होता है, जबकि मेरी अन्य तिथि मान है। मुझे datetime.today()उस समय का मान कैसे मिलता है जो टाइमजोन से अवगत है?

अभी, यह मुझे स्थानीय समय में समय दे रहा है, जो कि पीएसटी यानी यूटीसी - 8 घंटे के लिए होता है। सबसे खराब स्थिति, क्या ऐसा कोई तरीका है जिसे मैं मैन्युअल रूप से समय-समय पर datetimeलौटाए गए ऑब्जेक्ट में datetime.today()यूटीसी -8 में सेट कर सकता हूं ?

बेशक, आदर्श समाधान इसके लिए होगा कि वह समयक्षेत्र को स्वचालित रूप से जान सके।



10
लगता है जैसे हम datetime.now().astimezone()अजगर 3.6 के बाद से उपयोग कर सकते हैं
johnchen902

जवाबों:


362

मानक पुस्तकालय में, अपना टाइमज़ोन वर्ग बनाए बिना जागरूक टाइमज़ोन बनाने के लिए कोई क्रॉस-प्लेटफ़ॉर्म तरीका नहीं है।

विंडोज पर, वहाँ है win32timezone.utcnow(), लेकिन वह pywin32 का हिस्सा है। मैं बल्कि pytz लाइब्रेरी का उपयोग करने का सुझाव दूंगा , जिसमें अधिकांश टाइमज़ोन का लगातार अद्यतन डेटाबेस है।

स्थानीय टाइमज़ोन के साथ काम करना बहुत मुश्किल हो सकता है (नीचे "आगे पढ़ने" लिंक देखें), इसलिए आप अपने आवेदन के दौरान यूटीसी का उपयोग करना चाह सकते हैं, खासकर अंकगणितीय संचालन के लिए जैसे दो समय बिंदुओं के बीच के अंतर की गणना करना।

आप इस तरह वर्तमान तिथि / समय प्राप्त कर सकते हैं:

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)आज नहीं लौटा (जब तक कि UTC में मध्यरात्रि नहीं है), यह 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
इस उत्तर को जोड़ते हुए, यदि आप django का उपयोग करते हैं, तो timezone.now()इसके बजाय हमेशा उपयोग करें datetime.now()क्योंकि यह UTC का स्वचालित रूप से उपयोग करेगा यदि 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
देखें इस
विम

1
आपको आउटपुट के अलावा स्थानीयकृत समय का उपयोग नहीं करना चाहिए। टाइमजोन आधारित डेटाइम का उपयोग करते समय कई चीजें गलत हो जाती हैं: एक साधारण टाइमलेटा दिन की रोशनी की बचत को ध्यान में नहीं रखता है जब तक कि आप यूटीसी समय में शुरू नहीं करते हैं। यूटीसी पर आधारित टाइमजोन अवेयर हमेशा इस्तेमाल करें। जरूरत पड़ने पर आउटपुट पर स्थानीय समयक्षेत्र में परिवर्तित करें।
श्रीमती

4
@MrE से असहमति व्यक्त करने के लिए जिसे मैंने पहले स्वीकार किए गए उत्तर पर टिप्पणियों में आवाज़ दी है: स्थानीयकृत डेटासेट के साथ काम करने के लिए पूरी तरह से वैध कारण हैं और "आपको आउटपुट के अलावा स्थानीय समय का उपयोग नहीं करना चाहिए" व्यापक सलाह है। मान लीजिए कि आप एक दिन की बचत सीमा से कुछ घंटे पहले 1 दिन को डेटाइम में जोड़ रहे हैं, जिस पर घड़ियां एक घंटे पीछे जाती हैं। आप क्या परिणाम चाहते हैं? यदि आपको लगता है कि समय समान होना चाहिए, तो स्थानीयकृत डेटाटाइम का उपयोग करें। यदि आपको लगता है कि यह एक घंटे पहले होना चाहिए, तो यूटीसी या टाइमज़ोन-भोले डेटासेट का उपयोग करें। जो समझ में आता है कि डोमेन-निर्भर है।
मार्क अमेरी

@MarkAmery जितना मैं सहमत हो सकता हूं कि आप कई दिनों या घंटों में ADD या SUBTRACT कर सकते हैं और टाइमजोन मुद्दों (अपने उदाहरण की तरह) के बारे में परवाह नहीं करना चाहते हैं, यह टिप्पणी एक ग्राहक के लिए टाइमजोन सही समय बीतने से संबंधित है। चूंकि पायथन मुख्य रूप से बैक एंड प्रक्रियाओं के लिए उपयोग किया जाता है, इसलिए यह एक ग्राहक को कई बार गुजरता है। UTC में सर्वर को हमेशा दिनांक / समय पास करना चाहिए और क्लाइंट को इसे अपनी स्थानीय तिथि / समय / समयक्षेत्र में परिवर्तित करना चाहिए, अन्यथा खराब चीजें होती हैं: बस के आउटपुट की जांच करें datetime.datetime(2016, 11, 5, 9, 43, 45, tzinfo=pytz.timezone('US/Pacific'))और देखें कि क्या आप अपेक्षित हैं
MrE

"सर्वर को हमेशा UTC में दिनांक / समय पास करना चाहिए और ग्राहक को इसे अपनी स्थानीय तिथि / समय / समयक्षेत्र में परिवर्तित करना चाहिए" - नहीं, यह सार्वभौमिक रूप से सत्य नहीं है। कभी-कभी क्लाइंट के टाइमज़ोन का उपयोग करना अनुचित होता है और उचित टाइमज़ोन को डेटा के हिस्से के रूप में प्रेषित करने की आवश्यकता होती है। यदि, एक लंदन के रूप में, मैं सैन फ्रांसिस्को शतरंज क्लब की बैठक के समय को अपनी वेबसाइट पर देखता हूं, तो मुझे उन्हें लंदन के समय में नहीं, सैन फ्रांसिस्को के समय में देखना चाहिए।
मार्क अमेरी

69

पायथन 3 में, मानक पुस्तकालय UTC को समय-सीमा के रूप में निर्दिष्ट करना बहुत आसान बनाता है:

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

यदि आप ऐसा समाधान चाहते हैं जो केवल मानक पुस्तकालय का उपयोग करता है और जो पायथन 2 और पायथन 3 दोनों में काम करता है, तो jfs का उत्तर देखें

यदि आपको UTC की नहीं, बल्कि स्थानीय समयक्षेत्र की आवश्यकता है, तो Mihai Capotă का उत्तर देखें


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एक जागरूक datetime उदाहरण यूटीसी में दिन (आधी रात) की शुरुआत का प्रतिनिधित्व करता है और 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()

संबंधित: दिए गए UTC समय के लिए आधी रात (एक दिन की शुरुआत) प्राप्त करने के कई तरीकों की प्रदर्शन तुलना । नोट: यह अधिक जटिल है, एक गैर-निश्चित यूटीसी ऑफसेट के साथ एक समय क्षेत्र के लिए आधी रात को प्राप्त करने के लिए


16

वर्तमान समय का प्रतिनिधित्व करने वाले टाइम ज़ोन जागरूक डेटाटाइम ऑब्जेक्ट के निर्माण की एक अन्य विधि:

import datetime
import pytz

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

ध्यान दें कि pytz.utcऔर pytz.UTCदोनों परिभाषित हैं (और एक ही हैं)
drevicko

2
यह उत्तर स्वीकार किए गए की तुलना में बेहतर है क्योंकि यह अधिक सार्वभौमिक है: replace()आईएनजी टाइमजोन आमतौर पर अधिकांश अन्य उपयोगों में त्रुटि-प्रवण होता है, जबकि localize()आईएनजी समय-समय पर भोले टाइमस्टैम्प को असाइन करने का पसंदीदा तरीका है।
एंटनी हैचकिंस

@AntonyHatchkins: .localize()अस्पष्ट स्थानीय समय (गैर-utc इनपुट) के लिए विधि विफल हो जाती है। @ फिलफरेओ का जवाब जो उपयोग करता है वह.now(pytz_timezone) ऐसे मामलों में काम करना जारी रखता है।
jfs

जैसा कि अजगर डॉक्स में निर्दिष्ट है, .now(pytz_timezone)ठीक वैसा ही होता है localize(utcnow)- पहले यह यूटीसी में वर्तमान समय उत्पन्न करता है, फिर यह इसे एक टाइमजोन प्रदान करता है: "<...> इस मामले में परिणाम tz.fromutc(datetime.utcnow().replace(tzinfo=tz))" के बराबर है । दोनों उत्तर सही हैं और हमेशा काम करते हैं।
एंटनी हैचकिंस

1
एकमात्र भोले (गैर-यूटीसी) समय जिसे सुरक्षित रूप से टाइमजोन के बारे में जागरूक किया जा सकता है अब है : अंतर्निहित प्रणाली को यूटीसी मान पता है और pytzओल्सन डीबी के माध्यम से यह जानना चाहिए कि इसे दुनिया के किसी भी समयक्षेत्र में कैसे परिवर्तित किया जाए। दिन के उजाले की बचत के दौरान अस्पष्टता के कारण किसी अन्य भोले (गैर-यूटीसी) समय के समय को अवगत कराना मुश्किल है। यह कोई समस्या नहीं है .localize(इसे किसी is_dstमूल्य पर फीड करना किसी भी तिथि के लिए काम करता है)। यह डेलाइट सेविंग प्रैक्टिस की एक अंतर्निहित समस्या है।
एंटनी हैचकिंस

16

केवल मानक पुस्तकालय का उपयोग करने वाला एक-लाइनर, पायथन 3.3 के साथ शुरू होता है। आप एक स्थानीय समय क्षेत्र के बारे में पता प्राप्त कर सकते हैं 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
प्रलेखन एक बड़ी मदद है, यहाँ पाया गया: docs.python.org/3.8/library/… । कार्यक्षमता का यह अविश्वसनीय रूप से बुनियादी टुकड़ा डॉक्स में एक अस्पष्ट पैराग्राफ में गहराई से दफन है, ताकि स्टैकओवरफ़्लो का उत्तर इस जानकारी के साथ पूरे इंटरनेट पर प्रभावी रूप से एकमात्र स्थान हो। दस्तावेज़ीकरण में, यह भी देखा जा सकता है कि, पायथन 3.6 के बाद से, datetime.now()बिना किसी तर्क के कॉल किया जा सकता है और सही स्थानीय परिणाम लौटा सकता है (भोले datetimeएस को स्थानीय समय क्षेत्र में माना जाता है)।
atimholt

8

यदि आप Django का उपयोग कर रहे हैं , तो आप नॉन-टीज़ अवेयरनेस (केवल UTC ) सेट कर सकते हैं ।

सेटिंग में निम्न पंक्ति को टिप्पणी करें:

USE_TZ = True

8
आपने इस प्रश्न में उल्लिखित django को कहाँ देखा?
vonPetrushev

1
किसी तरह की आत्मा ने मेरी पिछली टिप्पणी-माफी को यहां हटा दिया, इसलिए फिर से: मेरे लिए शर्म की बात है, गलत जवाब क्योंकि सवाल Django- विशिष्ट नहीं है। मैंने इसे छोड़ दिया क्योंकि यह कुछ उपयोगकर्ताओं को वैसे भी मदद कर सकता है, लेकिन स्कोर के करीब पहुंचने पर मैं इसे हटा दूंगा। 0. यदि यह उत्तर अनुचित है, तो बेझिझक नीचे उतरें।
laffuste

6

pytz एक पायथन लाइब्रेरी है जो पाइथन 2.3 या उच्चतर का उपयोग करके सटीक और क्रॉस प्लेटफॉर्म की अनुमति देता है।

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प्रतिनिधित्व FORMAT के निर्देश को जोड़ रही है , उत्पन्न समय संरचना के यूटीसी ऑफसेट को इंगित करने के लिए। अन्य प्रतिनिधित्व स्वरूपों को डेटाइम मॉड्यूल डॉक्स में परामर्श दिया जा सकता है

आप यूटीसी समयक्षेत्र पर तारीख की जरूरत है, तो आप की जगह ले सकता time.localtime () के साथ time.gmtime ()

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'

संपादित करें

यह केवल python3 पर काम करता है । Z निर्देश पाइथन 2 _strptime.py कोड पर उपलब्ध नहीं है


ValueError: 'z' '% Y-% m-% dT% H:% M:% S% z' प्रारूप में एक बुरा निर्देश है
jno

आप अजगर 2 पर हैं, है ना? दुर्भाग्य से, ऐसा लगता है कि z निर्देश अजगर पर उपलब्ध नहीं है। _strptime.py कोड
jcazor

6

पाइथन डेटामेट.डाइमटाइम (।) (जो कि टाइमजोन अवगत है) में वर्णित तिथि तिथि का उपयोग करें :

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

1
JF सेबेस्टियन के इस जवाब को ऐसी स्थिति के लिए देखें जहां यह गलत परिणाम देता है।
एंटनी हैचकिंस

2
मुझे लगता है कि अन्य पोस्ट में त्रुटि केवल विशिष्ट उपयोग के मामलों में प्रासंगिक है। tzlocal()समारोह अभी भी सबसे सरल समाधान में से एक है और निश्चित रूप से यहाँ उल्लेख किया जाना चाहिए।
15:

2

में एक समय-सजग तिथि प्राप्त करना utc काम करने की तारीख घटाव के लिए पर्याप्त है।

लेकिन अगर आप अपने वर्तमान समय क्षेत्र में एक समय-ज्ञात तिथि चाहते हैं, tzlocalतो जाने का तरीका है:

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

PS dateutilका एक समान कार्य ( dateutil.tz.tzlocal) है। लेकिन नाम साझा करने के बावजूद इसके पास एक पूरी तरह से अलग कोड आधार है, जिसे जेएफ सेबेस्टियन द्वारा उल्लेख किया गया है , गलत परिणाम दे सकता है।


अजगर आमतौर पर सर्वर पर उपयोग किया जाता है। एक सर्वर पर स्थानीय समय क्षेत्र आमतौर पर व्यर्थ होता है और इसे हमेशा यूटीसी पर सेट किया जाना चाहिए। डिटाइमटाइम tzinfo को इस तरह सेट करना कुछ मामलों में विफल रहता है। बेहतर यूटीसी का उपयोग करें, फिर आउटपुट पर केवल वांछित समयक्षेत्र के लिए स्थानीयकरण करें। उदाहरण के लिए किसी भी समय पर गणना कंप्यूटर डेलाइट सेविंग पर विचार नहीं करता है, इसलिए इन्हें यूटीसी में किया जाना चाहिए, फिर स्थानीयकृत किया जाना चाहिए।
श्रीमती

@ गलत, अपमानजनक, उदाहरण?
एंटनी हैचकिंस

एक टाइमज़ोन में स्थानीयकृत एक डेटाइम ऑब्जेक्ट का उपयोग करने का प्रयास करें जो डेलाइट सेविंग को देखता है, डेलाइट सेविंग स्टेट को बदलने के लिए कई दिनों को जोड़ता है, और आप देखेंगे कि स्थानीय टाइमज़ोन में डेटाटाइम ऑब्जेक्ट्स पर संचालन विफल हो जाता है और डेलाइट सेविंग का सम्मान नहीं करेगा। इसलिए मेरी टिप्पणी है कि आपको हमेशा UTC समय में कोई भी डेटाटाइम ऑपरेशन करना चाहिए।
श्रीमती

इस बिंदु पर: ऐसा न करें, UTC में अपना संचालन करें, और फिर आउटपुट पर स्थानीय समय क्षेत्र में बदलने के लिए datetime.astimezone (टाइमज़ोन) का उपयोग करें।
श्रीमती

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, लेकिन आप किसी भी 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

अगर आपको अजगर में करंट टाइम और डेट मिलती है तो डेट और टाइम इम्पोर्ट कर लें, उसके बाद जैसे ही आपको डेट और टाइम मिलेगा, अजगर में pytz पैकेज।

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
>>>

पेंडुलम को स्थापित करने और उनके दस्तावेज देखने के लिए, यहां जाएं । इसमें बहुत सारे विकल्प (जैसे सरल ISO8601, RFC3339 और कई अन्य प्रारूप समर्थन), बेहतर प्रदर्शन और सरल कोड प्राप्त करने की प्रवृत्ति है।


यह सुनिश्चित करने के लिए कि वोट यहाँ क्यों है, यह कोड कई कार्यक्रमों में काम कर रहा है जो मेरे लिए 7/24 चलाए जाते हैं :)। ऐसा नहीं है कि मैं अन्य राय को ध्यान में रखता हूं, लेकिन कृपया यह कहें कि यह आपके लिए काम क्यों नहीं कर रहा है, मुझे इसकी जांच करने की अनुमति दें। अग्रिम धन्यवाद
ng10

0

नीचे दिए गए समय-समय की जानकारी के लिए समय-क्षेत्र का उपयोग करें। डिफ़ॉल्ट UTC है:

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

pnp_datetime की कोशिश करें , सभी समय का उपयोग किया गया है और लौटाया गया समय-क्षेत्र के साथ है, और किसी भी ऑफसेट-भोले और ऑफसेट-जागरूक मुद्दों का कारण नहीं होगा।

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

0

इस बात पर जोर दिया जाना चाहिए कि पायथन 3.6 के बाद से, आपको केवल एक समयक्षेत्र जागरूक डेटाटाइम ऑब्जेक्ट प्राप्त करने के लिए मानक लीब की आवश्यकता है जो स्थानीय समय (आपके ओएस की सेटिंग) का प्रतिनिधित्व करता है। Astimezone का उपयोग करना ()

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

(देखें @ johnchen902 की टिप्पणी)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.