CDateTime



This helper class is used to represent date and time. It is much more powerfull than standard runtime functions and allows to specify any date even before first and after 3000 year. Pay attention on how years, months, and days are numbered. They all start from 1. On the other hand days of week are numbered starting from 0. In order to prevent errors we recommend to use class constants like CDateTime::June and CDateTime::Friday to specify months and days of week. Here are some examples of using CDateTime and CInterval classes.


CDateTime now;                                           // Create object with current date and time 
CDateTime d{ 2001, CDateTime::February, 20, 15, 0, 0 };  // Create object storing 2001-02-20 15:00:00 date-time 
CInterval i{ now - d };                                  // Find difference between two date-times 
d += CInterval{ 0, 0, 5, 0, 0 };                         // Add 5 days to the d date-time object 
if (d.getDayOfWeek() == CDateTime::Wednesday)            // Check whether d object day of week is wednesday 
    std::cout << d.getDaysInMonth();                     // Print count of days in month of d object 

You can find more information in comments below.

class CDateTime
{
public:
    // Months 
    static const int January{ 1 };
    static const int February{ 2 };
    static const int March{ 3 };
    static const int April{ 4 };
    static const int May{ 5 };
    static const int June{ 6 };
    static const int July{ 7 };
    static const int August{ 8 };
    static const int September{ 9 };
    static const int October{ 10 };
    static const int November{ 11 };
    static const int December{ 12 };
    // Days of week 
    static const int Monday{ 0 };
    static const int Tuesday{ 1 };
    static const int Wednesday{ 2 };
    static const int Thursday{ 3 };
    static const int Friday{ 4 };
    static const int Saturday{ 5 };
    static const int Sunday{ 6 };

    CDateTime(); // Create with current date and time 
    CDateTime(const int year, const int month, const int day, const int hour, const int minute, const int second); // Create with specified date and time 
    CDateTime(const CDateTime &other) = default;
    CDateTime(CDateTime &&other) = default;
    CDateTime(const long long datetime); // Create from specified time point 

    int getYear() const; // Return year 
    int getMonth() const; // Return month. In range 1-12 
    int getDay() const; // Return day. In range 1-31 
    int getHour() const; // Return hour. In range 0-23 
    int getMinute() const; // Return minute. In range 0-59 
    int getSecond() const; // Return second. In range 0-60 
    int getDayOfWeek(); // Return day of week. In range 0-6 
    int getDaysInMonth() const; // Return count of days in current object 
    bool isLeap() const; // Return whether current object year is leap or not 

    bool setYear(const int value); // Set year 
    bool setMonth(const int value); // Set month 
    bool setDay(const int value); // Set day 
    bool setHour(const int value); // Set hour 
    bool setMinute(const int value); // Set minute 
    bool setSecond(const int value); // Set second 

    static int getDaysInMonth(const int year, const int month); // Return count of days in specified year and month 
    static bool isLeap(const int year); // Return whether specified year is leap or not 

    bool setDate(const int year, const int month, const int day); // Set date 
    bool setTime(const int hour, const int minute, const int second); // Set time 
    bool setDateTime(const int year, const int month, const int day, const int hour, const int minute, const int second); // Set date and time 

    bool operator==(const CDateTime &other) const; // Compare if this object date and time is equal to another one 
    bool operator!=(const CDateTime &other) const; // Compare if this object date and time is not equal to another one 
    bool operator>(CDateTime &other); // Compare if this object date-time is greater than in another one 
    bool operator>=(CDateTime &other); // Compare if this object date-time is greater or equal to another one 
    bool operator<(CDateTime &other); // Compare if this object date-time is less than in another one 
    bool operator<=(CDateTime &other); // Compare if this object date-time is less or equal to another one 
    CDateTime operator+(const CInterval &value); // Return date-time object equal to the current object date-time increased by specified interval 
    CDateTime &operator+=(const CInterval &value); // Add specified interval to the current object and return this object 
    CInterval operator-(CDateTime &other); // Return difference between this and another date-time objects 
    CDateTime operator-(const CInterval &value); // Return date-time object equal to the current object date-time decreased by specified interval 
    CDateTime &operator-=(const CInterval &value); // Subtract specified interval from the current object and return this object 
    CDateTime &operator=(const CDateTime &other) = default;
    CDateTime &operator=(CDateTime &&other) = default;

    explicit operator long long(); // Convert to time point(long long) 
};

Following operators are also available.

std::wostream &operator<<(std::wostream &stream, const CDateTime &a); // Output as source code
Namespace: nitisa
Include: Nitisa/Core/DateTime.h