আগামীকালের তারিখটি পাওয়ার জন্য সবচেয়ে পরিষ্কার এবং সর্বাধিক পাইথোনিক উপায়?


120

আগামীকালের তারিখ পাওয়ার জন্য সবচেয়ে পরিষ্কার ও সর্বাধিক পাইথোনিক উপায় কী? দিনের সাথে একটি যুক্ত করা, মাসের শেষে দিনগুলি হ্যান্ডেল করা ইত্যাদির চেয়ে আরও ভাল উপায় থাকতে হবে

উত্তর:



39

timedelta দিন, সেকেন্ড, মাইক্রোসেকেন্ড, মিলিসেকেন্ড, মিনিট, ঘন্টা, বা সপ্তাহ যোগ করে পরিচালনা করতে পারে।

>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2009, 10, 1)
>>> today + datetime.timedelta(days=1)
datetime.date(2009, 10, 2)
>>> datetime.date(2009,10,31) + datetime.timedelta(hours=24)
datetime.date(2009, 11, 1)

একটি মন্তব্যে জিজ্ঞাসা করা হিসাবে, লাফ দিন কোনও সমস্যা হয় না:

>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=1)
datetime.date(2004, 2, 29)
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=2)
datetime.date(2004, 3, 1)
>>> datetime.date(2005, 2, 28) + datetime.timedelta(days=1)
datetime.date(2005, 3, 1)

7

এর কোনো হ্যান্ডলিং লিপ সেকন্ড হউক না কেন:

>>> from datetime import datetime, timedelta
>>> dt = datetime(2008,12,31,23,59,59)
>>> str(dt)
'2008-12-31 23:59:59'
>>> # leap second was added at the end of 2008, 
>>> # adding one second should create a datetime
>>> # of '2008-12-31 23:59:60'
>>> str(dt+timedelta(0,1))
'2009-01-01 00:00:00'
>>> str(dt+timedelta(0,2))
'2009-01-01 00:00:01'

অভিশাপ।

সম্পাদনা - @ মার্ক: দস্তাবেজগুলি "হ্যাঁ" বলে, তবে কোডটি "এত বেশি না" বলে:

>>> time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")
(2008, 12, 31, 23, 59, 60, 2, 366, -1)
>>> time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
1230789600.0
>>> time.gmtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 6, 0, 0, 3, 1, 0)
>>> time.localtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 0, 0, 0, 3, 1, 0)

আমি ভাবব যে জিএমটাইম বা লোকালটাইম এমকেটাইম দ্বারা ফিরে আসা মানটি গ্রহণ করবে এবং সেকেন্ডের সংখ্যা হিসাবে 60 দিয়ে আমাকে মূল টুপলটি ফিরিয়ে দেবে। এবং এই পরীক্ষাটি দেখায় যে এই লিপ সেকেন্ডগুলি কেবল ম্লান হতে পারে ...

>>> a = time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
>>> b = time.mktime(time.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S"))
>>> a,b
(1230789600.0, 1230789600.0)
>>> b-a
0.0


এটি কারণ ইউনিক্স সময় লিপ সেকেন্ডগুলি পরিচালনা করে না। দেখুন en.wikipedia.org/wiki/Unix_time#History , mail-archive.com/leapsecs@rom.usno.navy.mil/msg00094.html এবং POSIX নিজেই।

"প্রতিটি এবং প্রতিদিন ঠিক 86400 সেকেন্ডের জন্য গণনা করা হবে

লিপ বছরগুলি সৌর বছর এবং এমনকি 365 দিনের মধ্যে পার্থক্যের জন্য অ্যাকাউন্ট করে, যখন লিপ সেকেন্ডগুলি সহজাতভাবে পৃথক হয় এবং ভূমিকম্পের মতো বাহ্যিক কারণগুলির দ্বারা সৃষ্ট পার্থক্যের জন্য অ্যাকাউন্ট করে। এটি তাদেরকে অনিয়মিত করে তোলে এবং ঠিক একইভাবে নির্ধারণ করা যায় না, যেমন 3 শে মার্চ, 2055 এর সপ্তাহের দিন নির্ধারণ করা।
ডেভিড উডস

1
@ ডেভিডউডস: লিপ সেকেন্ডগুলি ইউটিসিটিকে ইউটি 1 (আর্থ রোটেশন) থেকে +/- 0.9 সেকেন্ডের মধ্যে রাখতে হবে 1972 থেকে 2012 অবধি 25 টি লিপ সেকেন্ড জমে আছে Earth ভূমিকম্পগুলি এর কারণ হিসাবে খুব দুর্বল ( একক ভূমিকম্পে মাইক্রোসেকেন্ড পরিবর্তন আনতে পারে - 86400 এসআই সেকেন্ড থেকে দিনের সময়কালের মধ্যে মিলি মেকসেকেন্ডের পার্থক্যের চেয়ে হাজার গুণ কম )।
jfs

5

এমনকি বেসিক timeমডিউলটি এটি পরিচালনা করতে পারে:

import time
time.localtime(time.time() + 24*3600)

1
এটি মার্কিন যুক্তরাষ্ট্রের ডাইটলাইট সেভিংসের সীমানায় ব্যর্থ হয়, কারণ এই সীমানাগুলিতে একদিনের জন্য ২৩ ঘন্টা এবং একদিনের জন্য 25 ঘন্টা থাকতে হবে। এটি অ্যাকাউন্টে লিপ সেকেন্ডও নেয় না।
চার্লস উড

@ চার্লসউড: এই উত্তরটি অন্য এক ঘন্টার মধ্যে ফিরে আসতে পারে যা (কিছু সময় অঞ্চলে) এর অর্থ এটি আলাদা তারিখ (আগামীকাল নয়) ফেরত আসতে পারে তবে এটি সর্বদা 24 ঘন্টা এগিয়ে থাকার সময়টি ফিরে আসে (স্বীকৃত উত্তরটি মধ্যরাতে ফিরে আসে (এখন থেকে অজানা ঘন্টা) ))। 23:59:60 এবং 00:00:00 একই টাইমস্ট্যাম্প রয়েছে এমন সিস্টেমে লিপ সেকেন্ডের সময় না ডাকলে লিপ সেকেন্ড এখানে কীভাবে ফলাফল পরিবর্তন করতে পারে তা আমি দেখতে পাচ্ছি না।
jfs

সত্য, এখন থেকে এটি সর্বদা ২৪ ঘন্টা হবে, তবে এটাই ছিল না। ওপি আগামীকাল তারিখটি কীভাবে পাবেন তা জানতে চেয়েছিলেন । লিপ সেকেন্ডের জিনিসটি কেবল নিটপিকিং ছিল;)
চার্লস উড

@ চার্লসউড: হ্যাঁ আমি কেবল স্পষ্ট করে দিয়েছি যে এটি 23, 25 ঘন্টা ফিরে আসে না। এবং হ্যাঁ, এটি ভুল তারিখটি ফিরে আসতে পারে (আগামীকাল নয়, যেমন "ব্রাজিল / পূর্ব" টাইমজোন "2014-10-18 23:00:00" এর জন্য)। সম্পর্কিত: ইউটিসিতে বর্তমান সময় দেওয়া, আপনি কীভাবে কোনও নির্দিষ্ট টাইমজোনটিতে দিনের শুরু এবং শেষের সময়টি নির্ধারণ করেন?
jfs

@ জেফাসেবাস্টিয়ান রাইট, আমি কেবল এটি নির্দেশ করার চেষ্টা করছিলাম যে দিনগুলি সর্বদা 24 ঘন্টা দীর্ঘ হয় না । খেজুর দিয়ে কাজ করা এত কঠিন যে আশ্চর্যের কিছু নেই; এমনকি তাদের সম্পর্কে যোগাযোগ করাও শক্ত: /
চার্লস উড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.