আমি কীভাবে দুটি তারিখের মধ্যে কয়েক সেকেন্ডের মধ্যে পার্থক্যটি যাচাই করব?


180

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

ডেটটাইম.ডেটটাইম কঠিন প্রমাণিত হয়েছে এবং আমি সিটিটাইম লাইব্রেরিতে ডুব দিতে চাই না। এই ধরণের জিনিস জন্য সহজ কিছু আছে?

উত্তর:


515

আপনি যদি দুটি পরিচিত তারিখের মধ্যে পার্থক্য গণনা করতে চান তবে এটি ব্যবহার করুন total_seconds:

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400,0

#note that seconds doesn't give you what you want:
(b-a).seconds

0


95
'নোট' সর্বাধিক গুরুত্বপূর্ণ অংশ যা লোকেরা মিস করে। আমি আশা করি আমি এটিতে আরও একটি ভোট দিতে পারতাম।
ডেক্সটার

এমন সময় আছে যেখানে আমি লক্ষ্য করি এটি একটি আপাত ... ভুল ফলাফল দেয়। বিভক্ত দ্বিতীয় পার্থক্যের জন্য 59.800 সেকেন্ড। সুতরাং, ছোট ক্রিয়াকলাপগুলির জন্য, যেমন সেকেন্ডের পার্থক্য, মিলিসেকেন্ড বা মাইক্রোসেকেন্ডগুলি, কেউ ব্যবহার করতে পারে (b-a).microsecondsএবং তারপরে ভাগ করে সেকেন্ড (1000000) বা মিলিসেকেন্ডগুলি (1000) পেতে পারে
জেডএলডি প্রোডাকশন

এটি মান এবং সর্বদা ইতিবাচক থাকে বলে মনে হয়, এমনকি যখন একটি এবং খ অদলবদল হয়
নিকপিক

@ নিকপিক মানটি সর্বদা ইতিবাচক হয় না। উদাহরণস্বরূপ নিম্নলিখিতটি হ'ল -60:from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
জেডিম্যাটটিও

চিত্তাকর্ষক সমাধান! ফাংশন তৈরি করার জন্য ক্লিন কোডের প্রয়োজনীয়তা নেই।
পাওলো zOiO zuLLu Fabrício

34
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

এটা কি তোমার জন্য কাজ করবে?


1
+1 টি; আমরা উভয়ই অনুরোধের তারিখের বিষয়ে সত্যই চিন্তা করি না - আমরা অতিবাহিত সময় সম্পর্কে যত্নশীল। সুতরাং প্রদর্শিত হিসাবে কেবল একটি কাঁচা টাইমস্ট্যাম্প ব্যবহার করুন।
কার্ল নচেটেল

14
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(আপনি উপরে কিছুটা সময় অপেক্ষা করেছিলেন যতটুকু সময় 7 হবে)

আমি ডেটটাইম.ডেটটাইমটি মোটামুটি দরকারী বলে মনে করি, তাই যদি আপনার কোনও জটিল বা বিশ্রী পরিস্থিতি দেখা দেয় তবে দয়া করে আমাদের জানান।

সম্পাদনা: @ ওলপিএইচকে ধন্যবাদ জানাতে যে একজন ব্যক্তি সর্বদা প্রয়োজনে ঘন ঘন রিফ্রেশ করার চেষ্টা করে না যে তারিখের সময়গুলি একসাথে থাকবে। ব-দ্বীপের দিনগুলির জন্য অ্যাকাউন্টিং করে, আপনি দীর্ঘ সময়ের স্ট্যাম্পস্ট বৈষম্যগুলি পরিচালনা করতে পারেন:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800

1
d.seconds + d.days * 86400পরিবর্তে আপনি যদি ফিরে যান তবে একাধিক দিনের জন্য এটি সঠিক;)
ওল্ফ

7
মনে রাখবেন যে, সাধারণ ক্ষেত্রে এটি সঠিক নয় । কেস বিবেচনা করুন a - b, যেখানে aহয় সামনে b (অর্থাত, তাই ফলাফলের নেতিবাচক হতে থাকবে): (a - b).seconds == 86282যখন a - b == datetime.timedelta(-1, 86276, 627665)। আমার বিশ্বাস, সঠিক পদ্ধতিটি হ'ল timedelta.total_seconds()... তবে এটি কেবল পাই 2.7 +।
ডেভিড ওলবার

4
প্রকৃতপক্ষে, উত্তরটি সঠিক নয় এবং @ ডেভিডওয়েভার মন্তব্যটি প্রতিবিম্বিত করা উচিত। সঠিক উত্তর: ব্যবহার timedelta.total_seconds()। তদনুসারে হ্রাস করা।
অ্যাস্ট্রজুয়ানলু

3
পাইথন ২.6 উত্তরের জন্য উত্সাহিত। total_seconds()এটি একটি 2.7+ বৈশিষ্ট্য।
জো হোলোয়

@ জোহলোয় আমার অনুমান যে এটি পাইথন ২.6 এও ঠিকভাবে কাজ করছে না।
zen11625

12

পাইথন ২.7 সহ আমাদের টোটাল_সেকেন্ডস () রয়েছে দয়া করে পাইথন ২.6 এর জন্য নীচের কোডটি দেখুন

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)

0

এই যে আমার জন্য কাজ করছে।

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

আশাকরি এটা সাহায্য করবে!

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