কিভাবে দুটি তারিখ তুলনা করতে?


379

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

উদাহরণস্বরূপ, আমি যাচাইয়ের তারিখগুলির তালিকা তৈরি করছি তার তালিকার বর্তমান তারিখটি গত তারিখের অতীত কিনা তা আমি খতিয়ে দেখতে চাই, যাতে এটি স্বয়ংক্রিয়ভাবে একটি ইমেল প্রেরণ করে, অ্যাডমিনকে ছুটির দিন.টিএসটিএস ফাইলটি আপডেট করতে বলে।


20
Er, আপনি ব্যবহার <এবং >অন্য যে কোনও তুলনা মতো অপারেটর,।
ড্যানিয়েল রোজম্যান

12
@ জনম্যাচিন: আপনি প্রোটোটাইপ দিয়ে একটি ফাংশন লেখেন int compare_dates(void const *, void const*), struct Date *তুলনা যুক্তিটি উভয় যুক্তিই প্রয়োগ করেন এবং প্রয়োগ করেন। পাইথনের নতুন আগত ব্যক্তির পক্ষে এটি সুস্পষ্ট নাও হতে পারে।
ফ্রেড ফু

1
@ দারোয়ানস: দুঃখিত .... এস / যে কোনও ভাষাগুলি / যে কোনও যুক্তিসঙ্গত ভাষায় অভ্যস্ত যে কেউ ডকসটি অনুধাবন করে এবং তারিখের চেষ্টা করার জন্য কয়েক মিনিট ব্যয় করতে হবে <তারিখ 2
জন

2
docs.python.org/library/datetime.html#datetime-objects জন্য Ctrl-এফ "সমর্থিত অপারেশন" এর জন্য অনুসন্ধান
জন Machin

1
@ গ্যালাক্সি - তিনি একটি উপমা ব্যবহার করছেন, এটি দেখানোর জন্য যে একজন পাকা ব্যক্তির পক্ষে সাধারণ কী হওয়া উচিত তা মোট শিক্ষানবিশের পক্ষে সহজ নাও হতে পারে এবং এটি চিত্রিত করার জন্য তিনি সি ব্যবহার করছেন। তিনি প্রশ্নটি সি সম্পর্কে বলে মনে করেন না এবং তিনি ঠিক বলেছিলেন, আমি প্রায় ৮ বছর আগে এই প্রশ্নটি করার সময় আমি মোটামুটি শিক্ষানবিস ছিলাম এবং এর কোনওরকম কীভাবে কাজ হয়েছিল তা সম্পর্কে আমার কোনও ধারণা ছিল না।
সিসিল রদ্রিগেজ :3

উত্তর:


494

ব্যবহার করুন datetimeপদ্ধতি এবং অপারেটর <এবং তার কুটুম্ব।

>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)

19
এটি টাইমজোন-সচেতন মানগুলির জন্যও কাজ করে, যদি কেউ ভাবছেন।
মাদুর গেসেল

2
মধ্যে পার্থক্য কি pastএবং present? আমি আপনার উদাহরণ বুঝতে পারি না এবং এর ফলাফলটি বোঝা যায় না।
এমাদাপ্রেস

19
@ এ্যামডপ্রেস: ধারণা করুন এটি ম্যানুয়ালি টাইপ করা হয়েছিল। অতীত লাইনটি প্রথমে টাইপ করা হয়েছিল, যখন বর্তমান লাইনটি দ্বিতীয় টাইপ করা হয়েছিল ... সুতরাং অতীত লাইনটি প্রথমে প্রবেশ করানো হয়েছিল, অতীতে <বর্তমান সত্য present
ramcdougal

2
ডকটির উদ্ধৃতি দিয়ে: "যদি একটি তুলনা নিখুঁত হয় এবং অন্যটি সচেতন হয়, যদি অর্ডার তুলনা করার চেষ্টা করা হয় তবে টাইপরর উত্থাপিত হয় equality tzinfo অ্যাট্রিবিউট, সাধারণ tzinfo বৈশিষ্ট্য উপেক্ষা করা হয় এবং বেস তারিখের সময়কে তুলনা করা হয় both উভয় তুলনা যদি সচেতন হয় এবং আলাদা আলাদা tzinfo বৈশিষ্ট্য থাকে তবে তুলনাগুলি প্রথমে তাদের ইউটিসি অফসেটগুলি বিয়োগ করে (self.utcoffset () থেকে প্রাপ্ত) সমন্বয় করা হয় ""
বিকাশ প্রসাদ 13

2
পরিবর্তনশীল নামগুলি pastএবং হওয়া উচিত past_but_a_little_after। প্রযুক্তিগতভাবে, presentঅতীতেও যখন তুলনা past < presentকরা হয়।
গ্রিসাইটিস

74

ব্যবহার time

ধরা যাক আপনার কাছে স্ট্রিং হিসাবে প্রাথমিক তারিখগুলি রয়েছে:
date1 = "31/12/2015"
date2 = "01/01/2016"

আপনি নিম্নলিখিতগুলি করতে পারেন:
newdate1 = time.strptime(date1, "%d/%m/%Y")এবং newdate2 = time.strptime(date2, "%d/%m/%Y")এগুলিকে পাইথনের তারিখের ফর্ম্যাটে রূপান্তর করতে। তারপরে, তুলনা সুস্পষ্ট:

newdate1 > newdate2ফিরে False
newdate1 < newdate2আসবে ফিরে আসবেTrue


39

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)ফিরে আসবে True

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)ফিরে আসবে datetime.timedelta(-1)

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)ফিরে আসবে datetime.timedelta(1)

দেখতে ডক্স


3

অন্যান্য উত্তরগুলি datetimeএবং তুলনাগুলি কেবল তারিখ ছাড়াই সময়ের জন্য কাজ করে।

উদাহরণস্বরূপ, এখনই এটি সকাল 8:00 এর চেয়ে বেশি বা কম কিনা তা পরীক্ষা করতে আমরা ব্যবহার করতে পারি:

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

এবং পরে এর সাথে তুলনা করুন:

datetime.datetime.now().time() > eight_am  

যা ফিরে আসবে True


-1

দুটি তারিখের পার্থক্যের মধ্যে দিন গণনার জন্য, নীচের মতো করা যেতে পারে:

import datetime
import math

issuedate = datetime(2019,5,9)   #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine  #you want change

if diff_date.total_seconds() > 0.0:   #its matching your condition
    days = math.ceil(diff_date.total_seconds()/86400)  #calculate days (in 
    one day 86400 seconds)
    deductable_amount = round(amount,2)*days #calclulated fine for all days

যদি নির্ধারিত তারিখের সাথে এক সেকেন্ড বেশি হয় তবে আমাদের চার্জ নিতে হবে


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