উত্তর:
>>> import datetime
>>> first_time = datetime.datetime.now()
>>> later_time = datetime.datetime.now()
>>> difference = later_time - first_time
>>> seconds_in_day = 24 * 60 * 60
datetime.timedelta(0, 8, 562000)
>>> divmod(difference.days * seconds_in_day + difference.seconds, 60)
(0, 8) # 0 minutes, 8 seconds
প্রথম সময় থেকে পরবর্তী সময়টি বিয়োগ করা difference = later_time - first_time
একটি তারিখের সময় অবজেক্ট তৈরি করে যা কেবল পার্থক্য রাখে। উপরের উদাহরণে এটি 0 মিনিট, 8 সেকেন্ড এবং 562000 মাইক্রোসেকেন্ড রয়েছে।
delorean
ভুল উপস্থাপনা datetime
, pytz
পদ্ধতির উদাহরণ, প্রারম্ভিক কোড উদাহরণটিd = datetime.now(timezone(EST))
(পাঁচটির পরিবর্তে একটি পঠনযোগ্য লাইন) হিসাবে লেখা যেতে পারে ।
পাইথন ২.7 এ নতুন timedelta
উদাহরণ উদাহরণ .total_seconds()
। পাইথন ডক্স থেকে এটি সমান (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
।
তথ্যসূত্র: http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds
>>> import datetime
>>> time1 = datetime.datetime.now()
>>> time2 = datetime.datetime.now() # waited a few minutes before pressing enter
>>> elapsedTime = time2 - time1
>>> elapsedTime
datetime.timedelta(0, 125, 749430)
>>> divmod(elapsedTime.total_seconds(), 60)
(2.0, 5.749430000000004) # divmod returns quotient and remainder
# 2 minutes, 5.74943 seconds
ডেটটাইম উদাহরণ ব্যবহার করে
>>> from datetime import datetime
>>> then = datetime(2012, 3, 5, 23, 8, 15) # Random date in the past
>>> now = datetime.now() # Now
>>> duration = now - then # For build-in functions
>>> duration_in_s = duration.total_seconds() # Total number of seconds between dates
বছর সময়কাল
>>> years = divmod(duration_in_s, 31536000)[0] # Seconds in a year=365*24*60*60 = 31536000.
দিন সময়কাল
>>> days = duration.days # Build-in datetime function
>>> days = divmod(duration_in_s, 86400)[0] # Seconds in a day = 86400
কয়েক ঘন্টা সময়কাল
>>> hours = divmod(duration_in_s, 3600)[0] # Seconds in an hour = 3600
মিনিট সময়কাল
>>> minutes = divmod(duration_in_s, 60)[0] # Seconds in a minute = 60
সেকেন্ডে সময়কাল
>>> seconds = duration.seconds # Build-in datetime function
>>> seconds = duration_in_s
মাইক্রোসেকেন্ডে সময়কাল
>>> microseconds = duration.microseconds # Build-in datetime function
দুটি তারিখের মধ্যে মোট সময়কাল
>>> days = divmod(duration_in_s, 86400) # Get days (without [0]!)
>>> hours = divmod(days[1], 3600) # Use remainder of days to calc hours
>>> minutes = divmod(hours[1], 60) # Use remainder of hours to calc minutes
>>> seconds = divmod(minutes[1], 1) # Use remainder of minutes to calc seconds
>>> print("Time between dates: %d days, %d hours, %d minutes and %d seconds" % (days[0], hours[0], minutes[0], seconds[0]))
বা সহজভাবে:
>>> print(now - then)
2019 সম্পাদনা করুন যেহেতু এই উত্তরটি ট্র্যাকশন অর্জন করেছে, আমি একটি ফাংশন যুক্ত করব যা কারওর জন্য ব্যবহারকে সহজতর করে তুলতে পারে
from datetime import datetime
def getDuration(then, now = datetime.now(), interval = "default"):
# Returns a duration as specified by variable interval
# Functions, except totalDuration, returns [quotient, remainder]
duration = now - then # For build-in functions
duration_in_s = duration.total_seconds()
def years():
return divmod(duration_in_s, 31536000) # Seconds in a year=31536000.
def days(seconds = None):
return divmod(seconds if seconds != None else duration_in_s, 86400) # Seconds in a day = 86400
def hours(seconds = None):
return divmod(seconds if seconds != None else duration_in_s, 3600) # Seconds in an hour = 3600
def minutes(seconds = None):
return divmod(seconds if seconds != None else duration_in_s, 60) # Seconds in a minute = 60
def seconds(seconds = None):
if seconds != None:
return divmod(seconds, 1)
return duration_in_s
def totalDuration():
y = years()
d = days(y[1]) # Use remainder to calculate next variable
h = hours(d[1])
m = minutes(h[1])
s = seconds(m[1])
return "Time between dates: {} years, {} days, {} hours, {} minutes and {} seconds".format(int(y[0]), int(d[0]), int(h[0]), int(m[0]), int(s[0]))
return {
'years': int(years()[0]),
'days': int(days()[0]),
'hours': int(hours()[0]),
'minutes': int(minutes()[0]),
'seconds': int(seconds()),
'default': totalDuration()
}[interval]
# Example usage
then = datetime(2012, 3, 5, 23, 8, 15)
now = datetime.now()
print(getDuration(then)) # E.g. Time between dates: 7 years, 208 days, 21 hours, 19 minutes and 15 seconds
print(getDuration(then, now, 'years')) # Prints duration in years
print(getDuration(then, now, 'days')) # days
print(getDuration(then, now, 'hours')) # hours
print(getDuration(then, now, 'minutes')) # minutes
print(getDuration(then, now, 'seconds')) # seconds
TypeError: 'float' object is not subscriptable
জন্য ব্যবহার করার সময় আমি ত্রুটি পেয়েছি :then = datetime(2017, 8, 11, 15, 58, tzinfo=pytz.UTC)
now = datetime(2018, 8, 11, 15, 58, tzinfo=pytz.UTC)
getDuration(then, now, 'years')
একে অপরের থেকে বিয়োগ করুন। timedelta
পার্থক্য সহ আপনি একটি জিনিস পেতে ।
>>> import datetime
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now() # after a 5-second or so pause
>>> d2 - d1
datetime.timedelta(0, 5, 203000)
আপনি রূপান্তর করতে পারেন dd.days
, dd.seconds
এবং dd.microseconds
কয়েক মিনিট।
যদি a
, b
ডেটটাইম অবজেক্ট হয় তবে পাইথন 3 এ তাদের মধ্যে সময়ের পার্থক্যটি সন্ধান করতে:
from datetime import timedelta
time_difference = a - b
time_difference_in_minutes = time_difference / timedelta(minutes=1)
পূর্ববর্তী পাইথন সংস্করণগুলিতে:
time_difference_in_minutes = time_difference.total_seconds() / 60
যদি a
, b
নির্দোষ ডেটটাইম অবজেক্টস যেমন datetime.now()
তারপরে ফিরে আসে তবে ফলগুলি ভুল হতে পারে যদি অবজেক্টগুলি স্থানীয় সময়টিকে বিভিন্ন ইউটিসি অফসেটের সাথে উদাহরণস্বরূপ, ডিএসটি স্থানান্তর বা অতীতের / ভবিষ্যতের তারিখগুলির সাথে উপস্থাপন করে। আরও বিশদ: 24 ঘন্টা তারিখের সময় পার হয়ে গেছে তা খুঁজে বের করুন - পাইথন ।
নির্ভরযোগ্য ফলাফল পেতে, ইউটিসি সময় বা সময় অঞ্চল-সচেতন ডেটটাইম অবজেক্ট ব্যবহার করুন।
ডিভোড ব্যবহার করুন:
now = int(time.time()) # epoch seconds
then = now - 90000 # some time in the past
d = divmod(now-then,86400) # days
h = divmod(d[1],3600) # hours
m = divmod(h[1],60) # minutes
s = m[1] # seconds
print '%d days, %d hours, %d minutes, %d seconds' % (d[0],h[0],m[0],s)
এইভাবে আমি দুটি ডেটটাইম.ডেটটাইম অবজেক্টের মধ্যে কেটে যাওয়া ঘন্টার সংখ্যাটি পাই:
before = datetime.datetime.now()
after = datetime.datetime.now()
hours = math.floor(((after - before).seconds) / 3600)
timedelta.seconds
কেবলমাত্র স্পষ্টভাবে সঞ্চিত সেকেন্ডের সংখ্যা দেয় - যা ডকুমেন্টেশনের গ্যারান্টিটি একদিনেরও কম কম হবে। আপনি চান (after - before).total_seconds()
, যা পুরো ব-দ্বীপটিতে বিস্তৃত কয়েক সেকেন্ডের সংখ্যা দেয় ।
(after - before).total_seconds() // 3600
(পাইথন ২.7) বা (after - before) // timedelta(seconds=3600)
(পাইথন 3)
কেবলমাত্র দিনের সংখ্যাটি সন্ধান করতে: টাইমডেল্টার একটি 'দিন' বৈশিষ্ট্য রয়েছে। আপনি কেবল এটি জিজ্ঞাসা করতে পারেন।
>>>from datetime import datetime, timedelta
>>>d1 = datetime(2015, 9, 12, 13, 9, 45)
>>>d2 = datetime(2015, 8, 29, 21, 10, 12)
>>>d3 = d1- d2
>>>print d3
13 days, 15:59:33
>>>print d3.days
13
টাইমডেলটার সাথে সাথে ফর্ম্যাটিংয়ের কথা উল্লেখ করাও কার্যকর মনে হতে পারে Just স্ট্রিপটাইম () একটি বিন্যাস অনুসারে একটি সময়কে প্রতিনিধিত্ব করে একটি স্ট্রিংকে পার্স করে।
from datetime import datetime
datetimeFormat = '%Y/%m/%d %H:%M:%S.%f'
time1 = '2016/03/16 10:01:28.585'
time2 = '2016/03/16 09:56:28.067'
time_dif = datetime.strptime(time1, datetimeFormat) - datetime.strptime(time2,datetimeFormat)
print(time_dif)
এটি আউটপুট দেবে: 0: 05: 00.518000
আমি এই জাতীয় কিছু ব্যবহার করি:
from datetime import datetime
def check_time_difference(t1: datetime, t2: datetime):
t1_date = datetime(
t1.year,
t1.month,
t1.day,
t1.hour,
t1.minute,
t1.second)
t2_date = datetime(
t2.year,
t2.month,
t2.day,
t2.hour,
t2.minute,
t2.second)
t_elapsed = t1_date - t2_date
return t_elapsed
# usage
f = "%Y-%m-%d %H:%M:%S+01:00"
t1 = datetime.strptime("2018-03-07 22:56:57+01:00", f)
t2 = datetime.strptime("2018-03-07 22:48:05+01:00", f)
elapsed_time = check_time_difference(t1, t2)
print(elapsed_time)
#return : 0:08:52
return t1-t2
এটি এমকিটাইম ব্যবহার করে আমার পন্থা ।
from datetime import datetime, timedelta
from time import mktime
yesterday = datetime.now() - timedelta(days=1)
today = datetime.now()
difference_in_seconds = abs(mktime(yesterday.timetuple()) - mktime(today.timetuple()))
difference_in_minutes = difference_in_seconds / 60
mktime()
একটি ইনপুট হিসাবে স্থানীয় সময় আশা করে। স্থানীয় সময় সম্ভবত অস্পষ্ট এবং এক্ষেত্রে mktime()
একটি ভুল উত্তর ফিরে আসতে পারে। ব্যবহার করুন a - b
পরিবর্তে (ক, খ - DATETIME বস্তু) । mktime()
অপ্রয়োজনীয় এবং এটি কখনও কখনও ভুল হয়। এই ক্ষেত্রে এটি ব্যবহার করবেন না।
তারিখের মধ্যে পার্থক্য পেতে অন্যান্য উপায়ে;
import dateutil.parser
import datetime
last_sent_date = "" # date string
timeDifference = current_date - dateutil.parser.parse(last_sent_date)
time_difference_in_minutes = (int(timeDifference.days) * 24 * 60) + int((timeDifference.seconds) / 60)
সুতরাং মিন আউটপুট পেতে।
ধন্যবাদ
আমি আমার ক্রিয়াকলাপ পরীক্ষা এবং উন্নত করতে অবিচ্ছিন্ন একীকরণ পরীক্ষার জন্য সময়ের পার্থক্য ব্যবহার করেছি। কারো যদি এটির প্রয়োজন হয় তবে এখানে সহজ কোড
from datetime import datetime
class TimeLogger:
time_cursor = None
def pin_time(self):
global time_cursor
time_cursor = datetime.now()
def log(self, text=None) -> float:
global time_cursor
if not time_cursor:
time_cursor = datetime.now()
now = datetime.now()
t_delta = now - time_cursor
seconds = t_delta.total_seconds()
result = str(now) + ' tl -----------> %.5f' % seconds
if text:
result += " " + text
print(result)
self.pin_time()
return seconds
time_logger = TimeLogger()
ব্যবহার:
from .tests_time_logger import time_logger
class Tests(TestCase):
def test_workflow(self):
time_logger.pin_time()
... my functions here ...
time_logger.log()
... other function(s) ...
time_logger.log(text='Tests finished')
এবং লগ আউটপুটে আমার কাছে এরকম কিছু রয়েছে
2019-12-20 17:19:23.635297 tl -----------> 0.00007
2019-12-20 17:19:28.147656 tl -----------> 4.51234 Tests finished
@ অ্যাটাকের দুর্দান্ত উত্তরের উপর ভিত্তি করে , আমি ডেটটাইম পার্থক্য ক্যালকুলেটরটির একটি স্বল্পতর সরলিকৃত সংস্করণ প্রস্তাব করছি:
seconds_mapping = {
'y': 31536000,
'm': 2628002.88, # this is approximate, 365 / 12; use with caution
'w': 604800,
'd': 86400,
'h': 3600,
'min': 60,
's': 1,
'mil': 0.001,
}
def get_duration(d1, d2, interval, with_reminder=False):
if with_reminder:
return divmod((d2 - d1).total_seconds(), seconds_mapping[interval])
else:
return (d2 - d1).total_seconds() / seconds_mapping[interval]
পুনরাবৃত্তিমূলক ক্রিয়াকলাপগুলি এড়াতে আমি এটিকে পরিবর্তন করেছি, প্রিন্টের পূর্বনির্ধারিত ডিফল্ট ব্যবধানটি সরিয়েছি এবং মিলিসেকেন্ড, সপ্তাহ এবং আইএসও মাসের জন্য সমর্থন যোগ করেছি (প্রতি মাসের সমান হয় এমন অনুমানের উপর ভিত্তি করে মাসগুলি কেবলমাত্র আনুমানিক 365/12
)।
যা উত্পাদন করে:
d1 = datetime(2011, 3, 1, 1, 1, 1, 1000)
d2 = datetime(2011, 4, 1, 1, 1, 1, 2500)
print(get_duration(d1, d2, 'y', True)) # => (0.0, 2678400.0015)
print(get_duration(d1, d2, 'm', True)) # => (1.0, 50397.12149999989)
print(get_duration(d1, d2, 'w', True)) # => (4.0, 259200.00149999978)
print(get_duration(d1, d2, 'd', True)) # => (31.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'h', True)) # => (744.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'min', True)) # => (44640.0, 0.0014999997802078724)
print(get_duration(d1, d2, 's', True)) # => (2678400.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'mil', True)) # => (2678400001.0, 0.0004999997244524721)
print(get_duration(d1, d2, 'y', False)) # => 0.08493150689687975
print(get_duration(d1, d2, 'm', False)) # => 1.019176965856293
print(get_duration(d1, d2, 'w', False)) # => 4.428571431051587
print(get_duration(d1, d2, 'd', False)) # => 31.00000001736111
print(get_duration(d1, d2, 'h', False)) # => 744.0000004166666
print(get_duration(d1, d2, 'min', False)) # => 44640.000024999994
print(get_duration(d1, d2, 's', False)) # => 2678400.0015
print(get_duration(d1, d2, 'mil', False)) # => 2678400001.4999995