পাইথনে তারিখের সময়কে রূপান্তর করুন


631

আছে কি একটি বিল্ট-ইন একটি রূপান্তরের জন্য পদ্ধতি dateএকটি থেকে datetimeপাইথন মধ্যে, উদাহরণস্বরূপ পাবার জন্য datetimeপ্রদত্ত তারিখের মধ্যরাত্রি জন্য? বিপরীত রূপান্তর সহজ: datetimeএকটি .date()পদ্ধতি আছে।

আমাকে কি সত্যিই ম্যানুয়ালি কল করতে হবে datetime(d.year, d.month, d.day)?


117
নিরীহ প্রশ্ন নয়; তারিখের জিনিসগুলির একটি .datetime()পদ্ধতি থাকা উচিত ; মূর্খতা হ'ল তাদের কাছে এমন পদ্ধতি নেই।
Zags

9
@ জাগস: বা datetime.from_date()কনস্ট্রাক্টর।
jfs

2
@ ডেভিড নিমেসকি: জাগস এর মন্তব্য পড়ুন যা আমার মন্তব্যে জবাব দিয়েছে। এটি কী পদ্ধতিগুলির অস্তিত্ব থাকা উচিত ছিল সে সম্পর্কে ।
jfs

2
@ জেফাসেবাস্টিয়ান: আমি কীভাবে এটি মিস করেছি তা সম্পর্কে আমার কোনও ধারণা নেই ... এবং আমি পুরোপুরি একমত হয়েছি।
ডেভিড নেমেস্কি

7
না এটির তারিখ হওয়া উচিত না এটি তারিখের একটি উপসেট (এটি এমনকি নামটিতেও)। তারিখের সময় থেকে তারিখটি কী তা দ্ব্যর্থহীন। তবে অন্যভাবে, একটি তারিখ 24 ঘন্টা (সাধারণত) এর একটি ব্লক, তাই এতে অনেকগুলি ডেটটাইম থাকতে পারে। কোন তারিখ থেকে কোন তারিখটি আসবে? আপনি সর্বদা তাই 00:00 করতে পারবেন না কারণ যদি সেই সময়টি না থাকে তবে উদাহরণস্বরূপ দিবালোকের সঞ্চয়গুলি এড়িয়ে যায়। এত সহজ নয় #
ডালোর 12

উত্তর:


802

আপনি ব্যবহার করতে পারেন 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
আপনার কোডটি ডেটটাইম.টাইম () সময়.টাইম () এর সাথে বিভ্রান্ত না হওয়ার জন্য কেবল সাবধান হন। যোগ্য নাম FTW!
ডাস্টিন

8
হ্যাঁ, ভাল কথা। ভাগ্যক্রমে, সংযুক্তি () ব্যতিক্রম উত্থাপন করে যদি আপনি একটি time.timeব্যতীত অন্য কোনও কিছুতে পাস করেন datetime.time
ইএমপি

21
মধ্যরাতের জন্য, ডেটটাইম.টাইম.মিনে (২.7.১+) বা ডেটটাইম.মিনি.টাইম () (পুরাতন অজগর)
লারহাম ১

16
ভাল সমাধান, তবে আমি মনে করি না যে ডেটটাইম.মিনি.টাইম () হল 00:00:00 সময় পাওয়ার সর্বোত্তম উপায়। কারণ এটি যা করে তা হ'ল প্রথমে ডেটটাইম অনুসারে উপস্থাপনযোগ্য ন্যূনতম মানটি পুনরুদ্ধার করা এবং তার সময় উপাদানটি পাওয়া। প্রসঙ্গত, ডেটটাইম.মিনি = ডেটটাইম (MINYEAR, 1, 1, tzinfo = কিছুই নেই) এবং সময় রয়েছে 00:00:00। তবে আমি মনে করি যে সময়.মিনিং বা সময় (0, 0, 0, 0) এর মাধ্যমে 00:00:00 সময় স্পষ্ট করে তৈরি করা পরিষ্কার is
ফ্লোরিন ডুমিট্রেস্কু

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এরপরে - তবে মূলত তারা সকলেই অবজেক্ট থেকে যথাযথভাবে তথ্য বের করে এবং এটিকে আবার উপযুক্ত কর্টারে বা শ্রেণিবদ্ধের জন্য জমি বেঁধে রাখে datetime


12
খুব ভাল পয়েন্ট। datetime(d.year, d.month, d.day)গৃহীত উত্তরের চেয়ে অনেক বেশি পঠনযোগ্য বলে মনে হচ্ছে datetime.combine(d, datetime.min.time())
সাইমন তেউসি

2
@ সিমনটিউসি: midnight = datetime.datetime.combine(d, datetime.time.min)পরিষ্কার মনে হচ্ছে ( @লারহাম 1 দ্বারা প্রস্তাবিত )
জেফস

2
@ জেএফ সেবাস্তিয়ান: এটি কিছুটা পরিষ্কার পরিচ্ছন্ন তবে আমি তার উত্তরে ওয়েস উইনহামের সাথে একমত যে এটির পাঠককে ডেটটাইম.টাইম.মিন কী উপস্থাপন করে তা জানতে হবে। যদিও আমার কাছে datetime(d.year, d.month, d.day)এটি আরও সুস্পষ্ট বলে মনে হচ্ছে (সময় উপাদান ছাড়াই একটি ডেটটাইম)। যদিও এটি একটি সামান্য বিষয়, এবং "মধ্যরাত্রি" এর মতো একটি পরিবর্তনশীল নাম ব্যবহার করে এটি স্পষ্ট করে তোলে যে পাঠক কী datetime.time.minউপস্থাপন করে তা উপস্থাপন না করেও ফলাফল কী হবে ।
সাইমন তেউসি


76

গৃহীত উত্তরটি সঠিক, তবে আমি ব্যবহারটি এড়াতে পছন্দ করব datetime.min.time()কারণ এটি ঠিক কী করে তা আমার কাছে স্পষ্ট নয়। যদি এটি আপনার কাছে সুস্পষ্ট হয় তবে আপনার কাছে আরও শক্তি। timetupleপদ্ধতি এবং আদেশের উপর নির্ভরতা সম্পর্কেও আমি একইভাবে অনুভব করি ।

আমার মতে, datetimeমডিউল API এর সাথে খুব পরিচিত হওয়ার জন্য পাঠকের উপর নির্ভর না করে এটি করার সবচেয়ে পাঠযোগ্য, সুস্পষ্ট উপায় হ'ল:

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
ওয়েস Winham

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

2
d2dt = lambda date: datetime(year=date.year, month=date.month, day=date.day)এই উত্তরের অন-লাইন ফাংশন।
অ্যালিকানডিল

এটি কাজ করে, তবে আপনার প্রয়োজন datetimeহতে পারে টাইমজোন সচেতন হওয়ার। কোন ক্ষেত্রে, আপনি উদাহরণস্বরূপ import pytzএবং তারপর যুক্ত করতে পারেন tzinfo=pytz.timezone('Europe/London')

48

আপনি date.timetuple()পদ্ধতিটি এবং আনপ্যাক অপারেটরটি ব্যবহার করতে পারেন *

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

3
এটি আমার পরিস্থিতির জন্য দরকারী। আমি জানিনা যে এটি কোন তারিখ বা তারিখের সময় আমার পাশ হচ্ছে, এবং এটি কোন শ্রেণীর তা পরীক্ষা করা খুব অজগর নয়। এই পদ্ধতিটি দেখে মনে হচ্ছে এটি তারিখের সময় এবং তারিখ উভয়ের জন্য কাজ করবে work
গ্যাটারস্টার

আমি datetime.combine@ কিমলালুনোর উত্তরটি আবিষ্কার করার আগে এটি ব্যবহার করতাম । আমি মনে করি এটি মোটামুটি পাইথোনিক, বিশেষত কোনও datetime.timeঅবজেক্ট তৈরির ফলে যে datetime.time(*map(int,"H:M:S".split(":")))কোনও উপায়ে দেখা যাওয়ার সম্ভাবনা রয়েছে ...
টম

1
এটি আমার প্রিয় উত্তর
নম জি ভি ইউ

9

আজকে ২০১ being হচ্ছে, আমি মনে করি সবচেয়ে পরিষ্কার সমাধান পান্ডাস টাইমস্ট্যাম্প সরবরাহ করেছে:

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
সত্য, তবে ইনটগুলিকে স্ট্রিং এবং পিঠে রূপান্তর করা সম্ভবত সরাসরি কালিগুলির সাথে কাজ করার চেয়ে ব্যয়বহুল, সুতরাং আমি কেবল এটি একটি কম-ভলিউম প্রসেসিংয়ের জন্য ব্যবহার করব
Egor Kraev


-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() , একটি অবজেক্ট রয়েছে ।
Martijn Pieters
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.