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

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

কিভাবে:

C++20 আমাদের কাছে <chrono> লাইব্রেরির উন্নতি নিয়ে আসে, ফলে সময় নিয়ে কাজ করা এখন আর ঝামেলার নয়। এখানে একটি দ্রুত উদাহরণ দেখানো হল বর্তমান তারিখে কয়েক দিন যোগ করা হচ্ছে:

#include <iostream>
#include <chrono>
#include <format>

using namespace std::chrono;

int main() {
    // আজকের তারিখ নেওয়া
    auto today = floor<days>(system_clock::now());
    
    // আজকের তারিখে 30 দিন যোগ করা
    auto future_date = today + days(30);
    
    // system_clock ব্যবহার করে আউটপুট দেওয়ার জন্য time_point এ পরিণত করা
    auto tp = system_clock::time_point(future_date);
    
    // আউটপুট
    std::cout << "আজকের তারিখ: "
              << std::format("{:%F}\n", today);
    std::cout << "ভবিষ্যতে তারিখ (30 দিন পরে): "
              << std::format("{:%F}\n", tp);
    return 0;
}

নমুনা আউটপুট:

আজকের তারিখ: 2023-03-15
ভবিষ্যতে তারিখ (30 দিন পরে): 2023-04-14

দিনগুলি বিয়োগ করা একইরকমভাবে কাজ করে—আপনি শুধু + এর পরিবর্তে - ব্যবহার করবেন।

গভীর ডুব

C++20 আসার আগে, আপনি হয়তো বুস্টের মত লাইব্রেরি ব্যবহার করতেন তারিখগুলি ম্যানিপুলেট করার জন্য। কিন্তু আপডেট হওয়া <chrono> system_clock, year_month_day, এবং duration প্রকারের সাথে এটি সরল করে তোলে।

ঐতিহাসিকভাবে, তারিখ গণনা জটিল ছিল বিভিন্ন মাসের দৈর্ঘ্য, অধিবর্ষ এবং সময় অঞ্চলগুলির ম্যানুয়াল হ্যান্ডলিং এর কারণে। C++20 এর <chrono> এই সমস্যা সমাধান করে ক্যালেন্ডার ও সময় অঞ্চল সমর্থন প্রদান করে।

বিকল্প? আপনি এখনও বুস্ট ব্যবহার করতে পারেন বা নিজের তারিখ যুক্তি হাতে তৈরি করতে পারেন (অভিযানপূর্ণ, কিন্তু কেন?)। এছাড়া Howard Hinnant’s “date” লাইব্রেরি মত তৃতীয়-পক্ষের লাইব্রেরী আছে, যা C++20 চর্ণো আপডেটে প্রভাবশালী ছিল।

বাস্তবায়নের দিক থেকে, <chrono> মেয়াদকে কম্পাইল-সময়ের যুক্তিসংগত স্থিরাংক হিসেবে সংজ্ঞায়িত করে, ফ্লোটিং-পয়েন্টের সমস্যা এড়িয়ে চলে। year_month_day প্রকারটি sys_days এ নির্ভর করে, যা একটি সাধারণ যুগ (1970-01-01) থেকে দিনগুলি হিসেবে একটি time_point প্রতিনিধিত্ব করে।

আরও দেখুন