একটি ডেটটাইম মিলি সেকেন্ড সহ স্ট্রিংয়ে ফর্ম্যাট করুন


168

আমি datetimeমিলি সেকেন্ডের সাথে তারিখের একটি স্ট্রিং চাই । এই কোডটি আমার পক্ষে আদর্শ এবং আমি কীভাবে এটি সংক্ষিপ্ত করব তা শিখতে আগ্রহী।

from datetime import datetime

timeformatted= str(datetime.utcnow())
semiformatted= timeformatted.replace("-","")
almostformatted= semiformatted.replace(":","")
formatted=almostformatted.replace(".","")
withspacegoaway=formatted.replace(" ","")
formattedstripped=withspacegoaway.strip()
print formattedstripped


3
দয়া করে একটি শিরোনাম লিখুন যা আপনার সমস্যার বর্ণনা দেয় এবং আপনার প্রশ্নকে পরিষ্কার এবং বিন্দুতে রাখার চেষ্টা করুন।
agf

এখানে উল্লেখ করা দরকার যে অতিরিক্ত নির্ভুলতা প্রায়শই ঠিক ঠিক থাকে। উদাহরণস্বরূপ, জাভা এর দ্বারা Instant.parseনির্মিত strftime('%Y-%m-%dT%H:%M:%S.%fZ')
নিন্দনকে

উত্তর:


353

মিলিসেকেন্ডের সাথে একটি তারিখের স্ট্রিং পেতে (সেকেন্ডের পিছনে 3 দশমিক স্থান), এটি ব্যবহার করুন:

from datetime import datetime

print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]

>>>> OUTPUT >>>>
2020-05-04 10:18:32.926

দ্রষ্টব্য: পাইথন 3 এর printজন্য প্রথম বন্ধনী প্রয়োজন:

print(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])

1
সুনির্দিষ্টভাবে বলতে 2013-08-23 10:18:32.926গেলে, এর আউটপুট print datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
জান

3
দ্রষ্টব্য, আপনি যদি এর import datetimeপরিবর্তে ব্যবহার করতে চান তবে আপনাকে এটি ব্যবহার from datetime import datetimeকরতে হবে:datetime.datetime.utcnow().strftime("%H:%M:%S.%f")
লুক

17
যদি মাইক্রোসেকেন্ডগুলি 0 হয় তবে উইন্ডোজ ২.7 এ প্রয়োগের মাইক্রোসেকেন্ডগুলি প্রিন্ট করা হয় না তাই এটি সেকেন্ডে
ছাঁটাই

8
নোট করুন যে এইগুলি ছিটানো হয়েছে, মিলিসেকেন্ডের মতো নয়
জিনগুলি

2
জিনদের উল্লেখ অনুসারে, এটি কি ভুল হবে না যে প্রথম ড্রপ সংখ্যাটি = = 5 ?. আসলে ব্যবহারকারীর অংশটি যদি হয় 999500 হয় তবে আপনি কখনই মাইক্রোসেকেন্ডের অংশের সাথে বিদ্ধ হয়ে সময়টি সঠিকভাবে পাবেন না
ক্রিস

59

পাইথন ৩.6 এর সাহায্যে আপনি ব্যবহার করতে পারেন:

from datetime import datetime
datetime.utcnow().isoformat(sep=' ', timespec='milliseconds')

আউটপুট:

'2019-05-10 09:08:53.155'

এখানে আরও তথ্য: https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat


টাইমজোন সহ খুব কার্যকর: তারিখ = তারিখের সময় (2019,5,10) তারিখ_ওথ_টিজ = পিটজ.টাইমজোন ('ইউরোপ / রোম') local স্থানীয়করণ (তারিখ) তারিখ_ইথ_টিজ.আইসফর্ম্যাট (সেপ = 'টি', টাইমস্পেক = 'মিলিসেকেন্ড') আউটপুট: '2019-05-10T00: 00: 00.000 + 02: 00'
এনা

এটি প্রকৃত সমাধান যা গ্রহণ করা উচিত। এবং আইসোফর্ম্যাট () হ'ল জিপিএক্স ফর্ম্যাটে রফতানির জন্য আমার যা দরকার তা অনেক ধন্যবাদ!
ফিলিপ শুভ

22
print datetime.utcnow().strftime('%Y%m%d%H%M%S%f')

http://docs.python.org/library/datetime.html#strftime-strptime-behavior


13
এফওয়াইআই, এটি মাইক্রোসেকেন্ডগুলিকে শেষ 6 ডিজিট হিসাবে মুদ্রণ করে। [:-3]শেষ 3 সংখ্যার ড্রপ করতে প্রান্তে যুক্ত করুন যাতে এটি কেবল মিলিসেকেন্ড প্রদর্শন করে।
লাকাটা

5
মাইক্রোসেকেন্ডগুলি 6 ডিজিটের চেয়ে কম হতে পারে, সুতরাং [: -3] ভুল মিলিসেকেন্ডগুলি মুদ্রণ করছে
ক্যাবি

13
আমাদের যদি টাইমজোন থাকে?
ri দেবরিম্বরীস

1
@ Time টাইমজোন চেকআউট লরেনজোর জবাবের জন্য ডেভ্রিম্বারিস
এনা

17

@ কাবিবি এই বিষয়টি উত্থাপন করেছিলেন যে কয়েকটি সিস্টেমে মাইক্রোসেকেন্ডস ফর্ম্যাটটি %fদিতে পারে "0", তাই শেষ তিনটি অক্ষরটি কেবল কাটা পোর্টেবল নয়।

নিম্নলিখিত কোডটি সাবধানে মিলসেকেন্ড সহ একটি টাইমস্ট্যাম্প ফর্ম্যাট করে:

from datetime import datetime
(dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.')
dt = "%s.%03d" % (dt, int(micro) / 1000)
print dt

উদাহরণ আউটপুট:

2016-02-26 04:37:53.133

ওপি যে সঠিক আউটপুট চেয়েছিল তা পেতে, আমাদের বিরামচিহ্নগুলি অক্ষর থেকে আলাদা করতে হবে:

from datetime import datetime
(dt, micro) = datetime.utcnow().strftime('%Y%m%d%H%M%S.%f').split('.')
dt = "%s%03d" % (dt, int(micro) / 1000)
print dt

উদাহরণ আউটপুট:

20160226043839901

6
আমি আসলে যা করছি তা হ'ল: '% s।% 03 ডি'% (dt.strftime ("% Y-% m-% d% H:% M:% S"), ইনট (dt.microsecond / 1000 ))
ক্যাবি

2
@ কাব্বির সাথে একমত, স্ট্রিং এবং
ইন্টের

হ্যাঁ আমিও একমত ... :)
স্যাম ওয়াটকিন্স

1
এই উত্তরটি অন্যগুলির চেয়ে অনেক বেশি নির্ভুল এবং নিরাপদ। ধন্যবাদ!
হুনাফু

5

সম্ভবত এটির মতো:

import datetime
now = datetime.datetime.now()
now.strftime('%Y/%m/%d %H:%M:%S.%f')[:-3]  
# [:-3] => Removing the 3 last characters as %f is for microsecs.

দ্বিতীয়টি %mঅবশ্যই একটি হতে হবে %M, কারণ এটি কয়েক মিনিট, মাস নয়।
মাইকেল ডোনার

2

আমি ধরে নিয়েছি আপনি বোঝাতে চাইছেন আপনি ডেটটাইম.ডেটটাইম.স্ট্রফটাইম () এর চেয়ে দ্রুততর কিছু খুঁজছেন এবং মূলত কোনও ইউটিসি টাইমস্ট্যাম্প থেকে নন-আলফা অক্ষরগুলি সরিয়ে ফেলছেন।

আপনার পন্থা সামান্য দ্রুত, এবং আমি মনে করি আপনি স্ট্রিং টুকরো টুকরো করে জিনিসগুলিকে আরও বেশি গতি দিতে পারবেন:

>>> import timeit
>>> t=timeit.Timer('datetime.utcnow().strftime("%Y%m%d%H%M%S%f")','''
... from datetime import datetime''')
>>> t.timeit(number=10000000)
116.15451288223267

>>> def replaceutc(s):
...     return s\
...         .replace('-','') \
...         .replace(':','') \
...         .replace('.','') \
...         .replace(' ','') \
...         .strip()
... 
>>> t=timeit.Timer('replaceutc(str(datetime.datetime.utcnow()))','''
... from __main__ import replaceutc
... import datetime''')
>>> t.timeit(number=10000000)
77.96774983406067

>>> def sliceutc(s):
...     return s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
... 
>>> t=timeit.Timer('sliceutc(str(datetime.utcnow()))','''
... from __main__ import sliceutc
... from datetime import datetime''')
>>> t.timeit(number=10000000)
62.378515005111694

@ অক্স্টোপাস ভাল কাজ। ব্যক্তিগতভাবে, আমি সময়কে সাধারণ পরিমাপের জন্য টাইমিট ব্যবহার করি না। 0.20, পদ্ধতি জন্য - 1 - 0.35: এটা অদ্ভুত যে সময়ের অনুপাত আপনার কোড সহ ভিন্ন দেওয়া হলঃ 1 - - 0.67 0.53 এবং আমার সঙ্গে strftime - প্রতিস্থাপন - slicing
eyquem

পরীক্ষার প্রতিটি পুনরাবৃত্তিতে একবার সেটিং বনাম স্ট্রিমের (ডেটটাইম.ডেটটাইম.টকনো ()) সাথে কিছু করার জন্য হতে পারে?
অস্টিন মার্শাল

1
from datetime import datetime
from time import clock

t = datetime.utcnow()
print 't == %s    %s\n\n' % (t,type(t))

n = 100000

te = clock()
for i in xrange(1):
    t_stripped = t.strftime('%Y%m%d%H%M%S%f')
print clock()-te
print t_stripped," t.strftime('%Y%m%d%H%M%S%f')"

print

te = clock()
for i in xrange(1):
    t_stripped = str(t).replace('-','').replace(':','').replace('.','').replace(' ','')
print clock()-te
print t_stripped," str(t).replace('-','').replace(':','').replace('.','').replace(' ','')"

print

te = clock()
for i in xrange(n):
    t_stripped = str(t).translate(None,' -:.')
print clock()-te
print t_stripped," str(t).translate(None,' -:.')"

print

te = clock()
for i in xrange(n):
    s = str(t)
    t_stripped = s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:] 
print clock()-te
print t_stripped," s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:] "

ফলাফল

t == 2011-09-28 21:31:45.562000    <type 'datetime.datetime'>


3.33410112179
20110928212155046000  t.strftime('%Y%m%d%H%M%S%f')

1.17067364707
20110928212130453000 str(t).replace('-','').replace(':','').replace('.','').replace(' ','')

0.658806915404
20110928212130453000 str(t).translate(None,' -:.')

0.645189262881
20110928212130453000 s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]

অনুবাদ ব্যবহার করুন () এবং স্লাইসিং পদ্ধতি একই সময়ে চালিত
অনুবাদ () সুবিধাটি এক লাইনে ব্যবহারযোগ্য হওয়ার উপস্থাপন করে

প্রথমটির ভিত্তিতে সময়ের তুলনা করা:

1.000 * টি.স্ট্রিফটাইম ('% Y% m% d% H% M% S% f')

0.351 * str (t) .replace ('-', '')। প্রতিস্থাপন (':', '')। প্রতিস্থাপন ('।', '')। প্রতিস্থাপন ('', '')

0.198 * str (t)। ট্রান্সলেট (কোনটি নয়, '- :.')

0.194 * গুলি [: 4] + এস [5: 7] + এস [8:10] + এস [11:13] + এস [14:16] + এস [17:19] + এস [20:]


1
নিস! পারফরম্যান্স ত্যাগ ছাড়াই এটি ক্লিনার। str.translate () আমার পরীক্ষায় আসলে দ্রুত।
অস্টিন মার্শাল

1

আমি একই সমস্যাটি মোকাবিলা করেছি তবে আমার ক্ষেত্রে এটি গুরুত্বপূর্ণ ছিল যে মিলিসেকেন্ডটি গোল করা হয়েছিল এবং কাটা হয়নি

from datetime import datetime, timedelta

def strftime_ms(datetime_obj):
    y,m,d,H,M,S = datetime_obj.timetuple()[:6]
    ms = timedelta(microseconds = round(datetime_obj.microsecond/1000.0)*1000)
    ms_date = datetime(y,m,d,H,M,S) + ms
    return ms_date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]

1
import datetime

# convert string into date time format.

str_date = '2016-10-06 15:14:54.322989'
d_date = datetime.datetime.strptime(str_date , '%Y-%m-%d %H:%M:%S.%f')
print(d_date)
print(type(d_date)) # check d_date type.


# convert date time to regular format.

reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)

# some other date formats.
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)

<<<<<< আউটপুট >>>>>>>

2016-10-06 15:14:54.322989    
<class 'datetime.datetime'>    
06 October 2016 03:14:54 PM    
2016-10-06 03:14:54 PM    
2016-10-06 15:14:54

1
python -c "from datetime import datetime; print str(datetime.now())[:-3]"
2017-02-09 10:06:37.006

0
datetime
t = datetime.datetime.now()
ms = '%s.%i' % (t.strftime('%H:%M:%S'), t.microsecond/1000)
print(ms)
14:44:37.134

0

সমস্যা datetime.utcnow()অন্যান্য সমাধান এবং এটি হ'ল ধীর slow

আরও কার্যকর সমাধান এর মতো দেখতে পারে:

def _timestamp(prec=0):
    t = time.time()
    s = time.strftime("%H:%M:%S", time.localtime(t))
    if prec > 0:
        s += ("%.9f" % (t % 1,))[1:2+prec]
    return s

কোথায় precহবে3আপনার ক্ষেত্রে (মিলিসেকেন্ড) ।

ফাংশনটি 9 দশমিক জায়গায় কাজ করে (দয়া করে নম্বরটি নোট করুন 9 করে 2 য় ফর্ম্যাটিং স্ট্রিংয়ে করুন)।

আপনি যদি ভগ্নাংশের অংশটি গোল করতে চান তবে আমি "%.9f"পছন্দসই দশমিক দশকের সাথে গতিশীলভাবে বিল্ডিংয়ের পরামর্শ দেব ।

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