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


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.