মাইক্রোসেকেন্ড উপাদান ছাড়াই স্ট্রিং-এ পাইথনের ডেটটাইম


410

আমি ইউটিসি সময়ের স্ট্রিংগুলি বিটবুকিটের এপিআই প্রতিক্রিয়াগুলিতে যুক্ত করছি যা বর্তমানে কেবল আমস্টারডাম (!) সময়ের স্ট্রিং রয়েছে। ইউটিসি সময়ের স্ট্রিংগুলি অন্য কোথাও ফিরে আসার সাথে সঙ্গতি রাখার জন্য, পছন্দসই বিন্যাসটি 2011-11-03 11:07:04অনুসরণ করা হয় ( +00:00তবে এটি জার্মানি নয়)।

কোনও মাইক্রোসেকেন্ড উপাদান সহ একটি দৃষ্টান্ত থেকে এই জাতীয় স্ট্রিং ( কোনও মাইক্রোসেকেন্ড উপাদান ছাড়াই ) তৈরি করার সর্বোত্তম উপায় কী ?datetime

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

আমি একটি সম্ভাব্য উত্তর হিসাবে আমার কাছে সবচেয়ে ভাল বিকল্পটি যুক্ত করব, তবে এর থেকে আরও মার্জিত সমাধান হতে পারে।

সম্পাদনা: আমার উল্লেখ করা উচিত যে আমি প্রকৃতপক্ষে বর্তমান সময়ের মুদ্রণ করছি না - আমি datetime.nowএকটি দ্রুত উদাহরণ সরবরাহ করতাম । সুতরাং সমাধানটি ধরে নেওয়া উচিত নয় যে datetimeএটির যে কোনও উদাহরণ মাইক্রোসেকেন্ড উপাদান অন্তর্ভুক্ত করবে।

উত্তর:


840

আপনি যদি datetimeকোনও নির্দিষ্ট বিন্যাসে কোনও অবজেক্টটি বিন্যাস করতে চান যা মানক বিন্যাস থেকে আলাদা, তবে স্পষ্ট করে সেই ফর্ম্যাটটি নির্দিষ্ট করা ভাল:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

দিকনির্দেশনার ব্যাখ্যার জন্য ডকুমেন্টেশনdatetime.strftime() দেখুন %


10
একজন সহকর্মী এটিকে সঠিক পদ্ধতির জন্য স্রেফ একটি দৃ .়প্রত্যয়ী কেস তৈরি করেছেন। আমাকে বিশ্বাস করুন।
ডেভিডচেম্বার্স

3
সেই দৃinc়প্রত্যয়ী কেসটি ছিল - ডেটটাইম.রেপ্লেসটি ব্যবহার করে আপনার সমাধানটির উপরে এই সমাধানটি রেখে দেওয়া?
matlehmann

13
@ ম্যাটেলহম্যান: অবশ্যই আমি ডেভিডচ্যাম্বারের সহকর্মীর যুক্তি জানি না। তবে আমি মনে করি যদি আপনার উদ্দেশ্যটি একটি নির্দিষ্ট নির্দিষ্ট বিন্যাসে কোনও তারিখ মুদ্রণ করা হয় তবে আপনার এই উদ্দেশ্য সম্পর্কে স্পষ্ট হওয়া উচিত। এই উত্তরের কোডটি বলেছে "বর্তমান সময় নিন এবং ঠিক এটির মতো ফর্ম্যাট করুন"। অন্য উত্তরের কোডটি বলে যে "বর্তমান সময় নিন, মাইক্রোসেকেন্ডগুলিকে 0 তে সেট করুন এবং তারপরে একে কোনও স্ট্রিংয়ে রূপান্তর করুন"।
সোভেন মারনাচ

3
+1, স্ট্রিং ফর্ম্যাট সম্পর্কে স্পষ্ট হওয়া সমস্যাগুলি এড়ানো যদি ভবিষ্যতের পাইথনের সংস্করণে স্ট্যান্ডার্ড ডেটটাইম-স্ট্রের রূপান্তর পরিবর্তন হয়
অ্যালান ইভাঞ্জেলিস্টা

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

172
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07


1
আমার পরিস্থিতিতে, তারিখটি ইতিমধ্যে নির্মিত হয়েছে এবং আমার এটি দ্বিতীয় "ফ্লোর" করা দরকার। এই নিখুঁত, ধন্যবাদ।
ভিজ্রন্ড

1
এটাই সেরা উত্তর!
হাভোক

তুলনা করার জন্য স্ট্রিং বিন্যাসকরণ বা পার্সিংয়ের চেয়ে অনেক ভাল, আপনাকে ধন্যবাদ।
জ্যাচ ইয়ং

69

পাইথন ৩.6 এ:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat


4
আমি মনে করি যে 8 বছর পরে পাইথন 3.6 এর আবির্ভাবের সাথে এটি গ্রহণযোগ্য, সর্বজনীন উত্তর হওয়া উচিত। এই সম্পর্কে যুক্তি উভয় বোথ ওয়ার্ল্ডস @DylanYoung এবং AlexanderMP দ্বারা ভালো এই একই থ্রেডে অফার এখানে
pfabri


47

এইভাবেই আমি এটি করি। আইএসও ফর্ম্যাট:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

আপনি আইএসও ফর্ম্যাটটি না চাইলে আপনি 'টি' প্রতিস্থাপন করতে পারেন:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'

এটি আমার উত্তরের অনুরূপ। সেখানে পক্ষপাতী করার জন্য একটি কারণ আছে .isoformat()উপর unicode()?
ডেভিডচ্যাম্বারস

1
আপনি কী চান তার উপর নির্ভর করে, আপনি যদি পাইথন স্ট্রিং প্রতিনিধিত্বমূলক ব্যবহার unicode()চান এবং যদি আপনি আইএসও isoformat()
-8601

আমি দেখি. অবশ্যই unicode()তুলনায় আরও সুবিধাজনক .isoformat().replace('T', ' ')। ;)
ডেভিডচেম্বারস

আমি কেবলমাত্র সোভেনের সমাধানটি নন-আইসো বিন্যাসের জন্য ব্যবহার করব, এটি আরও সুস্পষ্ট: ডেটটাইম.নো ()। স্ট্রফটাইম ("% Y-% m-% d% H:% M"), তবে 'টি' এর পরিবর্তে অন্য একটি উপায়। আপনার যদি আইএসও এবং ইউনিকোড উভয় তারিখের প্রয়োজন হয় তবে সেরা সমাধান হতে পারে।
র‌্যাডটেক

isoformatবিভাজক স্পেসিফায়ার গ্রহণ করে, সুতরাং কোনও প্রতিস্থাপন করা উচিত নয়। শুধু করুন:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
কোয়া

17

তবুও অন্য একটি বিকল্প:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

ডিফল্টরূপে এটি স্থানীয় সময় ব্যবহার করে, আপনার যদি ইউটিসি দরকার হয় আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'

ডাউনভোট কারণ ওপি সময় নয়, তারিখের সময় সম্পর্কে জিজ্ঞাসা করেছিল।
জার্জেন এ। এরহার্ড 23'15

15

কাঁচের মাধ্যমে প্রথম 19 টি অক্ষর আপনি চেয়েছিলেন:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'

5
এটি কেবলমাত্র ভুল কারণ সময় স্ট্রিং সময় অঞ্চল স্পেসিফিকেশন যোগ, যেমন থাকতে পারে +05:30। সঠিক হবে str(now())[:19]
কে 3 --- আরএনসি

1
@ কে 3 --- আরএনসি: ধন্যবাদ আপনার পরামর্শ অনুযায়ী আপডেট করা হয়েছে।
স্টিভেন রাম্বালস্কি

বছরের পরে 10000, দ্বিতীয়টি মিস হবে
diti 3'19

সময় @ দিতি;) কে বলবে
ইয়াসোলা

8

আমি সাধারণত:

import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:
print(now)

আউটপুট:

2019-01-13 14:40:28

7

যেহেতু সমস্ত datetime.datetimeদৃষ্টান্তের একটি মাইক্রোসেকেন্ড উপাদান নেই (যেমন এটি শূন্য হয়), আপনি স্ট্রিংটি একটি "এ পার্টিশন করতে পারেন" " এবং শুধুমাত্র প্রথম আইটেম নিন, যা সর্বদা কার্যকর হবে:

unicode(datetime.datetime.now()).partition('.')[0]

3

আমরা নীচের মত কিছু চেষ্টা করতে পারেন

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]

এটি নিকৃষ্টতর .isoformat(' ', 'seconds'), পূর্ববর্তী উত্তরে প্রস্তাবিত।
ডেভিডচেম্বার

1
আমি যখন প্রস্তাবিত পূর্ববর্তী উত্তরের উপরের চেষ্টা করছি তখন আমি ত্রুটি নীচে নেমে যাচ্ছি >>> ডেটটাইম.ডেটটাইম.নো ()। আইসোফর্ম্যাট ('', 'সেকেন্ড') ট্রেসব্যাক (সর্বশেষতম কল): ফাইল "<স্টিডিন>", লাইন 1, <মডুল> ইন টাইপ এরির: আইসোফর্ম্যাট () দেওয়া হয় সর্বাধিক 1 টি যুক্তি (2 প্রদত্ত)
অভিষেক বাজাজ

আহ আমি দেখি. এটি পাইথন 3 এ আমার জন্য কাজ করে তবে পাইথন 2 এ নয়
ডেভিডচেম্বার

আমি পাইথন ৩.৪.৩ সংস্করণ ব্যবহার করছি, এতে আমি ত্রুটিটি দেখছি। >>> ডেটটাইম.ডেটটাইম.নো ()। আইসোফর্ম্যাট ('', 'সেকেন্ড') ট্র্যাকব্যাক (সর্বশেষতম কল শেষ): ফাইল "<স্টিডেন>", লাইন 1, <মডুল> টাইপ এরিয়ার: আইসোফর্ম্যাট () সর্বাধিক লাগে 1 টি যুক্তি (2 দেওয়া)
অভিষেক বাজাজ

1

আমি এটি সবচেয়ে সহজ উপায় বলে মনে করি।

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>> 

ডেটটাইম.ডেটটাইম.নো ()। স্ট্রফটাইম ("% Y-% m-% d% H:% M:% S") '2011-11-03 18:21:26' অনেক সহজ ইমো। তবে সহজ সর্বদা সেরা নয়
আন0n

1

এটি আমি ব্যবহার করি কারণ আমি বুঝতে পারি এবং তাই এটি আরও ভালভাবে স্মরণ করতে পারি (এবং তারিখের সময় ফর্ম্যাটটিও আপনার পছন্দ অনুসারে কাস্টমাইজ করা যেতে পারে): -

import datetime
moment = datetime.datetime.now()
print("{}/{}/{} {}:{}:{}".format(moment.day, moment.month, moment.year,
                                 moment.hour, moment.minute, moment.second))

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