@name Date/Time
@brief The date/@_time class in the library represents a @_time between 1/1/0001 12:00am and 12/31/9999 23:59:59.9999999.
@details
The @c omni::chrono::date_time class can be used to represent a date/@_time value as 100-nanosecond ticks that have elapsed since 1/1/0001 12:00am with a maximum value of 12/31/9999 23:59:59.9999999.

To get the current @_time you can simply call @c omni::chrono::date_time::now() which represents the current date/@_time in a local format; if you wish to get the date/@_time in UTC, you can call @c omni::chrono::date_time::utc_now() to get a UTC date/@_time object.

class 
{
    OMNI_EXPLICIT date_time(uint64_t ticks);
    date_time(uint64_t ticks, const omni::chrono::date_time_kind& kind);
    date_time(uint16_t year, uint8_t month, uint8_t day);
    date_time(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second);
    date_time(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, const omni::chrono::date_time_kind& kind);
    date_time(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, uint16_t millisecond);
    date_time(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, uint16_t millisecond, const omni::chrono::date_time_kind& kind);
    ~date_time();
    
    omni::chrono::date_time omni::chrono::date_time::add(const omni::chrono::time_span& value);
    omni::chrono::date_time omni::chrono::date_time::add_days(double value);
    omni::chrono::date_time omni::chrono::date_time::add_hours(double value);
    omni::chrono::date_time omni::chrono::date_time::add_milliseconds(double value);
    omni::chrono::date_time omni::chrono::date_time::add_minutes(double value);
    omni::chrono::date_time omni::chrono::date_time::add_months(int32_t months);
    omni::chrono::date_time omni::chrono::date_time::add_seconds(double value);
    omni::chrono::date_time omni::chrono::date_time::add_ticks(int64_t value);
    omni::chrono::date_time omni::chrono::date_time::add_years(int16_t value);
    bool omni::chrono::date_time::is_dst() const;
    int64_t omni::chrono::date_time::to_binary() const;
    omni::chrono::date_time omni::chrono::date_time::date() const;
    uint8_t omni::chrono::date_time::day() const;
    omni::chrono::day_of_week omni::chrono::date_time::day_of_week() const;
    uint16_t omni::chrono::date_time::day_of_year() const;
    int32_t omni::chrono::date_time::hash_code() const;
    uint8_t omni::chrono::date_time::hour() const;
    omni::chrono::date_time_kind omni::chrono::date_time::kind() const;
    uint16_t omni::chrono::date_time::millisecond() const;
    uint8_t omni::chrono::date_time::minute() const;
    uint8_t omni::chrono::date_time::month() const;
    uint8_t omni::chrono::date_time::second() const;
    uint64_t omni::chrono::date_time::ticks() const;
    omni::chrono::time_span omni::chrono::date_time::time_of_day() const;
    uint16_t omni::chrono::date_time::year() const;
    omni::chrono::time_span omni::chrono::date_time::subtract(const omni::chrono::date_time& value) const;
    omni::chrono::date_time omni::chrono::date_time::subtract(const omni::chrono::time_span& value) const;
    double omni::chrono::date_time::to_oa_date() const;
    uint64_t omni::chrono::date_time::to_file_time() const;
    uint64_t omni::chrono::date_time::to_file_time_utc() const;
    omni::chrono::date_time omni::chrono::date_time::to_local_time() const;
    std::string omni::chrono::date_time::to_string(const std::string& format) const;
    omni::chrono::date_time omni::chrono::date_time::to_utc()
    omni::sequence::string_t omni::chrono::date_time::get_date_time_formats() const;
    omni::sequence::string_t omni::chrono::date_time::get_date_time_formats(char format) const;
    omni::chrono::date_time& operator=(const omni::chrono::date_time& ap);
    omni::chrono::date_time operator+(const omni::chrono::time_span& t);
    omni::chrono::date_time operator-(const omni::chrono::time_span& t);
    omni::chrono::date_time& operator+=(const omni::chrono::time_span& t);
    omni::chrono::date_time& operator-=(const omni::chrono::time_span& t);
    omni::chrono::time_span operator+(const omni::chrono::date_time& d2);
    omni::chrono::time_span operator-(const omni::chrono::date_time& d2);
    bool operator==(const omni::chrono::date_time& d2) const;
    bool operator!=(const omni::chrono::date_time& d2) const;
    bool operator<(const omni::chrono::date_time& d2) const;
    bool operator<=(const omni::chrono::date_time& d2) const;
    bool operator>(const omni::chrono::date_time& d2) const;
    bool operator>=(const omni::chrono::date_time& d2) const;
    
    static omni::chrono::date_time min_value()
    {
        return omni::chrono::date_time();
    }

    static omni::chrono::date_time max_value()
    {
        return omni::chrono::date_time(OMNI_TICKS_TO_10000AD, omni::chrono::date_time_kind::UNSPECIFIED);
    }

    static uint16_t days_in_month(uint16_t year, uint8_t month);
    static omni::chrono::date_time from_binary(int64_t date_data);
    static omni::chrono::date_time from_file_time(int64_t file_time);
    static omni::chrono::date_time from_file_time_utc(int64_t file_time);
    static omni::chrono::date_time from_oa_date(double d);
    static omni::chrono::date_time from_offset(const omni::chrono::date_time& other, const omni::chrono::span_t& offset);
    static omni::chrono::date_time from_offset(const omni::chrono::date_time& other, const omni::chrono::span_t& offset, const omni::chrono::date_time_kind& kind);
    static omni::chrono::date_time from_offset(uint64_t ticks, const omni::chrono::span_t& offset);
    static omni::chrono::date_time from_offset(uint64_t ticks, const omni::chrono::span_t& offset, const omni::chrono::date_time_kind& kind);
    static omni::chrono::date_time from_offset(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, const omni::chrono::span_t& offset);
    static omni::chrono::date_time from_offset(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, const omni::chrono::span_t& offset, const omni::chrono::date_time_kind& kind);
    static omni::chrono::date_time from_offset(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, uint16_t millisecond, const omni::chrono::span_t& offset);
    static omni::chrono::date_time from_offset(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, uint16_t millisecond, const omni::chrono::span_t& offset, const omni::chrono::date_time_kind& kind);
    static double offset_from_utc();
    static omni::chrono::date_time specify_kind(const omni::chrono::date_time& value, const omni::chrono::date_time_kind& kind);
    static omni::chrono::date_time now();
    static omni::chrono::date_time utc_now();
    static omni::chrono::date_time today();
    static bool is_leap_year(uint16_t year);
    static omni::chrono::date_time parse(const std::string& s);
    static omni::chrono::date_time parse_exact(const std::string& s, const std::string& format);
    static bool try_parse(const std::string& s, omni::chrono::date_time& result);
    static bool try_parse_exact(const std::string& s, const std::string& format, const omni::chrono::date_time_styles& style, omni::chrono::date_time& result);
};

uint16_t omni::chrono::days_in_month(uint16_t year, uint8_t month)
omni::chrono::date_time omni::chrono::from_binary(int64_t date_data)
omni::chrono::date_time omni::chrono::from_file_time(int64_t file_time)
omni::chrono::date_time omni::chrono::from_file_time_utc(int64_t file_time)
omni::chrono::date_time omni::chrono::from_oa_date(double d)
omni::chrono::date_time omni::chrono::specify_kind(const omni::chrono::date_time& value, const omni::chrono::date_time_kind& kind)
omni::chrono::date_time omni::chrono::now()
omni::chrono::date_time omni::chrono::utc_now()
omni::chrono::date_time omni::chrono::today()
bool omni::chrono::is_leap_year(uint16_t year)



@section Date/Time Utility Functions

You can get various things here.