Files

199 lines
6.9 KiB
C
Raw Permalink Normal View History

#pragma once
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/crt/Exports.h>
#include <aws/crt/Types.h>
#include <aws/common/date_time.h>
#include <chrono>
namespace Aws
{
namespace Crt
{
enum class DateFormat
{
RFC822 = AWS_DATE_FORMAT_RFC822,
ISO_8601 = AWS_DATE_FORMAT_ISO_8601,
AutoDetect = AWS_DATE_FORMAT_AUTO_DETECT,
};
enum class Month
{
January = AWS_DATE_MONTH_JANUARY,
February = AWS_DATE_MONTH_FEBRUARY,
March = AWS_DATE_MONTH_MARCH,
April = AWS_DATE_MONTH_APRIL,
May = AWS_DATE_MONTH_MAY,
June = AWS_DATE_MONTH_JUNE,
July = AWS_DATE_MONTH_JULY,
August = AWS_DATE_MONTH_AUGUST,
September = AWS_DATE_MONTH_SEPTEMBER,
October = AWS_DATE_MONTH_OCTOBER,
November = AWS_DATE_MONTH_NOVEMBER,
December = AWS_DATE_MONTH_DECEMBER,
};
enum class DayOfWeek
{
Sunday = AWS_DATE_DAY_OF_WEEK_SUNDAY,
Monday = AWS_DATE_DAY_OF_WEEK_MONDAY,
Tuesday = AWS_DATE_DAY_OF_WEEK_TUESDAY,
Wednesday = AWS_DATE_DAY_OF_WEEK_WEDNESDAY,
Thursday = AWS_DATE_DAY_OF_WEEK_THURSDAY,
Friday = AWS_DATE_DAY_OF_WEEK_FRIDAY,
Saturday = AWS_DATE_DAY_OF_WEEK_SATURDAY,
};
class AWS_CRT_CPP_API DateTime final
{
public:
/**
* Initializes time point to epoch
*/
DateTime() noexcept;
/**
* Initializes time point to any other arbitrary timepoint
*/
DateTime(const std::chrono::system_clock::time_point &timepointToAssign) noexcept;
/**
* Initializes time point to millis Since epoch
*/
DateTime(uint64_t millisSinceEpoch) noexcept;
/**
* Initializes time point to epoch time in seconds.millis
*/
DateTime(double epoch_millis) noexcept;
/**
* Initializes time point to value represented by timestamp and format.
*/
DateTime(const char *timestamp, DateFormat format) noexcept;
bool operator==(const DateTime &other) const noexcept;
bool operator<(const DateTime &other) const noexcept;
bool operator>(const DateTime &other) const noexcept;
bool operator!=(const DateTime &other) const noexcept;
bool operator<=(const DateTime &other) const noexcept;
bool operator>=(const DateTime &other) const noexcept;
DateTime operator+(const std::chrono::milliseconds &a) const noexcept;
DateTime operator-(const std::chrono::milliseconds &a) const noexcept;
/**
* Assign from seconds.millis since epoch.
*/
DateTime &operator=(double secondsSinceEpoch) noexcept;
/**
* Assign from millis since epoch.
*/
DateTime &operator=(uint64_t millisSinceEpoch) noexcept;
/**
* Assign from another time_point
*/
DateTime &operator=(const std::chrono::system_clock::time_point &timepointToAssign) noexcept;
/**
* Assign from an ISO8601 or RFC822 formatted string
*/
DateTime &operator=(const char *timestamp) noexcept;
explicit operator bool() const noexcept;
int GetLastError() const noexcept;
/**
* Convert dateTime to local time string using predefined format.
*/
bool ToLocalTimeString(DateFormat format, ByteBuf &outputBuf) const noexcept;
/**
* Convert dateTime to GMT time string using predefined format.
*/
bool ToGmtString(DateFormat format, ByteBuf &outputBuf) const noexcept;
/**
* Get the representation of this datetime as seconds.milliseconds since epoch
*/
double SecondsWithMSPrecision() const noexcept;
/**
* Milliseconds since epoch of this datetime.
*/
uint64_t Millis() const noexcept;
/**
* In the likely case this class doesn't do everything you need to do, here's a copy of the time_point
* structure. Have fun.
*/
std::chrono::system_clock::time_point UnderlyingTimestamp() const noexcept;
/**
* Get the Year portion of this dateTime. localTime if true, return local time, otherwise return UTC
*/
uint16_t GetYear(bool localTime = false) const noexcept;
/**
* Get the Month portion of this dateTime. localTime if true, return local time, otherwise return UTC
*/
Month GetMonth(bool localTime = false) const noexcept;
/**
* Get the Day of the Month portion of this dateTime. localTime if true, return local time, otherwise return
* UTC
*/
uint8_t GetDay(bool localTime = false) const noexcept;
/**
* Get the Day of the Week portion of this dateTime. localTime if true, return local time, otherwise return
* UTC
*/
DayOfWeek GetDayOfWeek(bool localTime = false) const noexcept;
/**
* Get the Hour portion of this dateTime. localTime if true, return local time, otherwise return UTC
*/
uint8_t GetHour(bool localTime = false) const noexcept;
/**
* Get the Minute portion of this dateTime. localTime if true, return local time, otherwise return UTC
*/
uint8_t GetMinute(bool localTime = false) const noexcept;
/**
* Get the Second portion of this dateTime. localTime if true, return local time, otherwise return UTC
*/
uint8_t GetSecond(bool localTime = false) const noexcept;
/**
* Get whether or not this dateTime is in Daylight savings time. localTime if true, return local time,
* otherwise return UTC
*/
bool IsDST(bool localTime = false) const noexcept;
/**
* Get an instance of DateTime representing this very instant.
*/
static DateTime Now() noexcept;
/**
* Computes the difference between two DateTime instances and returns the difference
* in milliseconds.
*/
std::chrono::milliseconds operator-(const DateTime &other) const noexcept;
private:
aws_date_time m_date_time;
bool m_good;
};
} // namespace Crt
} // namespace Aws