ভবিষ্যত বা অতীতের তারিখ গণনা করা

Haskell:
ভবিষ্যত বা অতীতের তারিখ গণনা করা

কিভাবে:

Haskell তারিখ নিয়ে কাজ করার জন্য time এর মত লাইব্রেরিগুলি ব্যবহার করে। এখানে তারিখে দিন বা মাস যোগ করা বা তাদের বিয়োগ করে অতীতের একটি তারিখ খুঁজে পাওয়ার উপায় দেখানো হলো।

import Data.Time

-- বর্তমান তারিখে দিন যোগ করা
addDaysToCurrent :: Integer -> IO Day
addDaysToCurrent n = do
  today <- getCurrentTime
  timezone <- getCurrentTimeZone
  let localToday = utcToLocalTime timezone today
  return $ addDays n (localDay localToday)

-- ব্যবহার: addDaysToCurrent 10 বর্তমান তারিখে ১০ দিন যোগ করা

-- দিন যোগ অথবা বিয়োগ করে ভবিষ্যত বা অতীতের তারিখ গণনা করা
calculateDate :: Day -> Integer -> Day
calculateDate start n = addDays n start

-- ব্যবহারের উদাহরণ:
-- let futureDate = calculateDate (fromGregorian 2023 1 1) 90

-- মাস এবং বছর নিয়ে কাজ করার জন্য, আমরা `addGregorianMonthsClip` এবং `addGregorianYearsClip` ব্যবহার করি
calculateDateMonths :: Day -> Integer -> Day
calculateDateMonths start n = addGregorianMonthsClip n start

-- ব্যবহার:
-- let futureMonth = calculateDateMonths (fromGregorian 2023 1 1) 2

-- একটি তারিখ YYYY-MM-DD ফরম্যাটে প্রদর্শন
printFormattedDate :: Day -> IO ()
printFormattedDate date = putStrLn $ formatTime defaultTimeLocale "%F" date

-- ব্যবহার:
-- printFormattedDate futureDate

গভীরে প্রবেশ

Haskell-এ, তারিখ গণনার জন্য আমরা প্রায়ই time লাইব্রেরিটি ব্যবহার করে থাকি। এই লাইব্রেরিটি DateTime অ্যারিথমেটিক, পার্সিং, এবং ফর্ম্যাটিং এর জন্য টাইপ এবং ফাংশন প্রদান করে। ঐতিহাসিকভাবে, মানুষ আগে ম্যানুয়ালি তারিখ সামঞ্জস্য করত, কিন্তু time এর মত লাইব্রেরিগুলি ক্যালেন্ডারের অসঙ্গতিগুলি (যেমন অধিবর্ষ) সামলায়।

time এর বিকল্পগুলির মধ্যে Data.Time.Calendar.OrdinalDate এবং Data.Time.Clock.POSIX রয়েছে, যা উপলব্ধি সংখ্যা অথবা টাইমস্ট্যাম্পের সাথে কাজ করার মত বিভিন্ন প্রয়োজনের জন্য।

বাস্তবায়নে, তারিখ গণনা আশ্চর্যজনকভাবে জটিল। time এর মত ফাংশনগুলি, যেমন addGregorianMonthsClip এর মাধ্যমে, মেলানো তারিখটি বৈধ হওয়া নিশ্চিত করা হয়। উদাহরণস্বরূপ, জানুয়ারি ৩১ তারিখে এক মাস যোগ করলে, এটি ফেব্রুয়ারির শেষ দিন (২৮ অথবা ২৯) পর্যন্ত “ক্লিপ” করবে, মার্চ ৩ তারিখে নয়।

আরও দেখুন