पायथन में डेटाइम में कनवर्ट करें


632

वहाँ है एक अंतर्निहित एक परिवर्तित करने के लिए विधि dateएक करने के लिए datetimeअजगर में, उदाहरण के प्राप्त करने के लिए datetimeदी गई तारीख की आधी रात के लिए? विपरीत रूपांतरण आसान है: datetimeएक .date()विधि है।

क्या मुझे वास्तव में मैन्युअल रूप से कॉल करना है datetime(d.year, d.month, d.day)?


117
मूर्खतापूर्ण सवाल नहीं; दिनांक वस्तुओं में एक .datetime()विधि होनी चाहिए ; मूर्खतापूर्ण यह है कि उनके पास ऐसी कोई विधि नहीं है।
जग्स

9
@ झंडे: या datetime.from_date()निर्माता।
JFS

2
@DavidNemeskey: ज़ैग्स की टिप्पणी पढ़ें जो मेरी टिप्पणी का जवाब देती है। यह इस बारे में है कि किन विधियों का अस्तित्व होना चाहिए
JFS

2
@JFSebastian: मुझे नहीं पता कि मैं कैसे चूक गया ... और मैं पूरी तरह से सहमत हूं।
डेविड नेमेस्की

7
नहीं, यह डेट डेटटाइम का सबसेट नहीं है (यह नाम में भी है)। यह स्पष्ट है कि डेट डेटटाइम क्या है। लेकिन दूसरा रास्ता गोल है, एक तारीख 24h (आमतौर पर) का एक ब्लॉक है, इसलिए इसमें कई डेटासेट हो सकते हैं। डेट डेट क्या होगी? आप हमेशा ऐसा 00:00 नहीं कर सकते क्योंकि क्या होगा अगर वह समय मौजूद नहीं है, उदाहरण के लिए जैसे दिन की बचत ने इसे छोड़ दिया। इतना आसान नहीं है #
dalore

जवाबों:


803

आप उपयोग कर सकते हैं datetime.combine(date, time); समय के लिए, आप datetime.timeआधी रात को इनिशियलाइज्ड ऑब्जेक्ट बनाते हैं ।

from datetime import date
from datetime import datetime

dt = datetime.combine(date.today(), datetime.min.time())

79
धन्यवाद। इस तथ्य के साथ संयुक्त समय () रिटर्न (0,0) मुझे लगता है कि यह सबसे साफ है:datetime.combine(d, time())
EMP

33
बस अपने कोड को datetime.time () time.time () के साथ भ्रमित नहीं होने दें। योग्य नाम FTW!
डस्टिन

8
हाँ, अच्छी बात है। सौभाग्य से, गठबंधन () एक अपवाद उठाता है यदि आप एक time.timeया इसके अलावा किसी और में गुजरते हैं datetime.time
EMP

21
मध्यरात्रि के लिए, डेटाइमटाइम.इन.मिन (2.7.1+) या डेटाइमटाइम.मिन.टाइम () (पुराने अजगर) पर एक अजगर निरंतर है
लार्हम

16
अच्छा समाधान है, लेकिन मुझे नहीं लगता कि datetime.min.time () एक 00:00:00 समय प्राप्त करने का सबसे साफ तरीका है। ऐसा इसलिए है क्योंकि यह जो करता है वह पहले डेटाटाइम द्वारा न्यूनतम मूल्य का प्रतिनिधित्व करता है और फिर इसके समय घटक को प्राप्त करता है। संयोग से, datetime.min = डेटाइम (MINYEAR, 1, 1, tzinfo = कोई नहीं) और 00:00:00 का समय है। हालाँकि, मुझे लगता है कि यह स्पष्ट रूप से 00:00:00 समय या तो time.min या time (0, 0, 0, 0) के माध्यम से बनाने के लिए क्लीनर है।
फ्लोरिन डुमिट्रेसस्कू

130

कई तरीके हैं, हालांकि मेरा मानना ​​है कि आपके द्वारा उल्लेखित (और नापसंद) सबसे पठनीय है।

>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)

और आगे - लेकिन मूल रूप से वे सभी dateवस्तु से उचित रूप से जानकारी निकालने और इसे वापस करने के लिए उपयुक्त ctor या classfunction में जुताई करते हैं datetime


12
बहुत अच्छी बात है। datetime(d.year, d.month, d.day)स्वीकृत उत्तर की तुलना में अधिक पठनीय लगता है datetime.combine(d, datetime.min.time())
साइमन टवेसी

2
@SimonTewsi: midnight = datetime.datetime.combine(d, datetime.time.min)क्लीनर लगता है ( @लार्हम 1 द्वारा सुझाया गया )
9:15

2
@ जेएफ सेबस्टियन: यह कुछ हद तक साफ है, लेकिन मैं उनके जवाब में वेस विन्हम से सहमत हूं कि पाठक को यह जानना आवश्यक है कि डेटाइम.टाइम.मिन क्या दर्शाता है। जबकि मुझे ऐसा लगता है कि datetime(d.year, d.month, d.day)यह अधिक स्पष्ट है (समय घटक के बिना एक डेटाटाइम)। यह एक मामूली बात है, हालांकि, और "आधी रात" जैसे चर नाम का उपयोग करने से यह स्पष्ट होता है कि परिणाम क्या है अगर पाठक को यह पता नहीं है कि क्या datetime.time.minप्रतिनिधित्व करता है।
साइमन टेवेसी


76

स्वीकृत उत्तर सही है, लेकिन मैं datetime.min.time()इसका उपयोग करने से बचना पसंद करूंगा क्योंकि यह मेरे लिए बिल्कुल स्पष्ट नहीं है कि यह क्या करता है। यदि यह आपके लिए स्पष्ट है, तो आपके लिए अधिक शक्ति है। मैं भी उसी तरीके timetupleऔर ऑर्डर पर निर्भरता के बारे में महसूस करता हूं ।

मेरी राय में, datetimeमॉड्यूल एपीआई से बहुत परिचित होने के लिए पाठक पर भरोसा किए बिना ऐसा करने का सबसे पठनीय, स्पष्ट तरीका है:

from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year, 
    month=today.month,
    day=today.day,
)

यह मेरा स्पष्ट "निहित से बेहतर है।"


और मूल विचार के लिए काइल गिब्सन के लिए एक टिप टिप: stackoverflow.com/users/513197/kyle-gibson
Wes Winham

मैं आपकी भावना से सहमत हूं। समय-सारणी और तारांकन और मिनट () के साथ इन सभी अन्य उत्तरों के लिए अनुसंधान की आवश्यकता होती है, और तिथियों और डेटाटाइम्स को संभालने का पायथन तरीका वैसे भी थोड़ा बोझिल होता है, जितना कि माइक्रोसॉफ्ट VBA में उन्हें आसानी से संभाल लेता है। यह उन्हें भाषा में हैश प्रतीकों में लपेटने जितना सरल है। लेकिन मैं पीछे हटा।
बोबोर्ट

2
d2dt = lambda date: datetime(year=date.year, month=date.month, day=date.day)इस उत्तर के लाइनर समारोह।
एलियाकंडिल

यह काम करता है, लेकिन आपको datetimeसमय-समय पर जागरूक होने की आवश्यकता हो सकती है । उदाहरण के लिए , आप किस मामले में import pytzजोड़ सकते हैं tzinfo=pytz.timezone('Europe/London')
alstr

48

आप date.timetuple()विधि और अनपैक ऑपरेटर का उपयोग कर सकते हैं *

args = d.timetuple()[:6]
datetime.datetime(*args)

3
यह मेरी स्थिति के लिए उपयोगी है। मुझे नहीं पता कि यह एक तारीख या डेटाइम है जिसे मैं पारित कर रहा हूं, और यह जांचने के लिए बहुत पाइथोनिक नहीं है कि यह किस वर्ग का है। यह तरीका ऐसा लगता है कि यह डेटाइम और डेट ऑब्जेक्ट दोनों के लिए काम करेगा।
गैटस्टर

मैंने datetime.combine@ kiamlaluno के उत्तर के माध्यम से खोज करने से पहले इसका उपयोग किया । मुझे लगता है कि यह काफी pythonic है, विशेष रूप से किसी datetime.timeवस्तु का निर्माण किसी datetime.time(*map(int,"H:M:S".split(":")))भी तरह से दिखने की संभावना है ...
टॉम

1
यह मेरा पसंदीदा उत्तर है
नाम जी VU

9

आज २०१६ होने के नाते, मुझे लगता है कि सबसे स्वच्छ समाधान पांडा टाइमस्टैम्प द्वारा प्रदान किया गया है:

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

टाइमस्टैम्प, डंडटाइम के बराबर का पांडा है और ज्यादातर मामलों में इसके साथ विनिमेय है। चेक:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

लेकिन अगर आप वास्तव में एक वेनिला डेटाटाइम चाहते हैं, तो आप अभी भी कर सकते हैं:

pd.Timestamp(d).to_datetime()

टाइमज़ोन के साथ काम करते समय टाइमस्टैम्प दूसरों की तुलना में डेटाटाइम की तुलना में बहुत अधिक शक्तिशाली होते हैं। वास्तव में, टाइमस्टैम्प इतना शक्तिशाली है कि यह एक दया है कि वे बहुत खराब दस्तावेज हैं ...


अच्छा निर्णय। जैसा कि मैंने सोचा था कि यह एक पांडा डेटाटाइम समाधान के लिए एक अजगर डेटाइम समाधान की आवश्यकता होगी। शेम पांडा में डेटइंडेक्स की अवधारणा नहीं है।
लिटिल बॉबी टेबल्स

5
हमें सिर्फ 2016 में भी डेटाइम मैनिपुलेशन करने के लिए हैवीवेट पैकेज की आवश्यकता क्यों है?
काऊबर्ट जूल

इसके लिए पंडों को बाहर लाना एक चींटी को हथौड़ा लेने के समान है
देजी एस

5

तिथि से डेटटाइम में परिवर्तित करने का एक तरीका जिसका उल्लेख अभी तक नहीं किया गया है:

from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')

1
यह सच है, लेकिन आवेषण को स्ट्रिंग्स और बैक में परिवर्तित करना संभवत: सीधे किट्स के साथ काम करने की तुलना में अधिक महंगा है, इसलिए मैं केवल
इसको


-10

अगर आपको कुछ जल्दी चाहिए, datetime_object.date()तो आप डेटाइम ऑब्जेक्ट की एक तारीख देते हैं।


8
सेशन विपरीत चाहता है, से जाने के dateलिए datetime
टॉम

सवाल से: विपरीत रूपांतरण आसान है: एक है विधि। , बोल्ड जोर मेरा। datetime.date()
मार्टिन पीटर्स

-13

मैं अजगर के लिए नौसिखिया हूं। लेकिन इस कोड ने मेरे लिए काम किया जो निर्दिष्ट इनपुट को मैं डेटाइम को प्रदान करता है। यहाँ कोड है। यदि मैं गलत हूं तो मुझे सही करों।

import sys
from datetime import datetime
from time import mktime, strptime

user_date = '02/15/1989'
if user_date is not None:
     user_date = datetime.strptime(user_date,"%m/%d/%Y")
else:
     user_date = datetime.now()
print user_date

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