8#include "Arp/System/Core/PrimitiveTypes.hpp"
12#ifndef ARP_USE_ARP_SYSTEM_CORE
18#ifndef ARP_INSIDE_ARP_H
19 #error Never include 'DateTime.hpp' directly, just include 'Arp.h'
32enum class DateTimeKind
54 using String = BasicString<char8>;
64 ARP_DEPRECATED(
"Use overload with DateTimeKind parameter instead.")
105 ARP_DEPRECATED("Use overload with DateTimeKind parameter instead.")
106 DateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond,
int microsecond);
139 DateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond,
int microsecond, DateTimeKind kind);
154 bool operator==(const
DateTime& arg)const;
158 bool operator!=(const
DateTime& arg)const;
162 bool operator>(const
DateTime& arg)const;
166 bool operator<(const
DateTime& arg)const;
170 bool operator>=(const
DateTime& arg)const;
174 bool operator<=(const
DateTime& arg)const;
230 DateTimeKind
GetKind(
void)const;
277 uint64 ToUnixMicrosecondTicks(
void)const;
292 friend
std::ostream& operator<<(
std::ostream& os, const
DateTime& dateTime);
293 friend
std::istream& operator>>(
std::istream& is,
DateTime& dateTime);
296 int GetDatePart(
int part)const;
299 static
int64 DateToTicks(
int year,
int month,
int day);
300 static
int64 TimeToTicks(
int hour,
int minute,
int second);
301 static
int64 TimeToTicks(
int hour,
int minute,
int second,
int millisecond,
int microsecond);
311 static const
int kindShift = 62;
312 static const
uint64 kindMask = 3ULL << kindShift;
313 static const
uint64 ticksMask = ~kindMask;
316 static const
int64 ticksPerMicrosecond = 10;
317 static const
int64 ticksPerMillisecond = ticksPerMicrosecond * 1000;
318 static const
int64 ticksPerSecond = ticksPerMillisecond * 1000;
319 static const
int64 ticksPerMinute = ticksPerSecond * 60;
320 static const
int64 ticksPerHour = ticksPerMinute * 60;
321 static const
int64 ticksPerDay = ticksPerHour * 24;
324 static const
int daysPerYear = 365;
326 static const
int daysPer4Years = daysPerYear * 4 + 1;
328 static const
int daysPer100Years = daysPer4Years * 25 - 1;
330 static const
int daysPer400Years = daysPer100Years * 4 + 1;
333 static const
int daysTo1970 = daysPer400Years * 4 + daysPer100Years * 3 + daysPer4Years * 17 + daysPerYear;
335 static const
int daysTo1601 = daysPer400Years * 4;
337 static const
int daysTo10000 = daysPer400Years * 25 - 366;
339 static const
int daysToMonth365[];
340 static const
int daysToMonth366[];
342 static const
int datePartYear = 0;
343 static const
int datePartMonth = 2;
344 static const
int datePartDayOfYear = 1;
345 static const
int datePartDay = 3;
348 static const
int64 unix0Ticks = daysTo1970 * ticksPerDay;
349 static const
int64 opcua0Ticks = daysTo1601 * ticksPerDay;
369 return this->
GetTicks() == arg.GetTicks();
374 return this->
GetTicks() != arg.GetTicks();
379 return this->
GetTicks() > arg.GetTicks();
384 return this->
GetTicks() < arg.GetTicks();
389 return this->
GetTicks() >= arg.GetTicks();
394 return this->
GetTicks() <= arg.GetTicks();
399 return (
int64)(this->data & ticksMask);
404 return (DateTimeKind)(this->data >> kindShift);
407inline DateTime DateTime::FromUnixMicrosecondTicks(
uint64 microseconds)
409 return DateTime(unix0Ticks + (
uint64)microseconds * ticksPerMicrosecond, DateTimeKind::Utc);
415 os << dateTime.ToIso8601String();
Value ToBinary(void) const
Converts this instance to its binary representation.
Definition: DateTime.cpp:351
static const int64 MinTicks
DEPRECATED.
Definition: DateTime.hpp:90
int64 ToUnixTimeMicroseconds(void) const
Converts this instance to unix time in microseconds (UTC).
Definition: DateTime.cpp:337
static DateTime FromIso8601String(const String &input)
Creates a DateTime from the as argument passed ISO8601 string.
Definition: DateTime.cpp:226
DateTimeKind GetKind(void) const
Gets the DateTimeKind of this instance.
Definition: DateTime.cpp:257
int GetDay(void) const
Gets the day of this instance.
Definition: DateTime.cpp:278
DateTime(void)
Default constructor.
int GetMillisecond(void) const
Gets the millisecond of this instance.
Definition: DateTime.cpp:306
String ToIso8601String(void) const
Converts this instance to an Iso8601 string .
Definition: DateTime.cpp:358
ARP_EXPORT friend bool operator<=(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:130
static DateTime FromOpcUaTime(int64 opcUaTime)
Creates a DateTime from the argument passed in OpcUA time.
Definition: DateTime.cpp:218
Ticks GetTicks(void) const
Gets the ticks of this instance in units of 100 nanoseconds.
Definition: DateTime.cpp:250
ARP_EXPORT friend bool operator>=(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:119
static const int64 MaxTicks
DEPRECATED.
Definition: DateTime.hpp:92
ARP_EXPORT friend bool operator==(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:75
int GetYear(void) const
Gets the year of this instance.
Definition: DateTime.cpp:264
static bool IsLeapYear(int year)
Returns an indication whether the specified year is a leap year.
Definition: DateTime.cpp:243
static DateTime GetUtcNow(void)
Gets the current time in UTC.
Definition: DateTime.cpp:186
int64 ToOpcUaTime(void) const
Converts this instance to OpcUA time (UTC).
Definition: DateTime.cpp:344
int GetMinute(void) const
Gets the minute of this instance.
Definition: DateTime.cpp:292
ARP_EXPORT friend std::ostream & operator<<(std::ostream &os, const DateTime &value)
Writes the DateTime value to the given output streams in Iso8601 format.
Definition: DateTime.cpp:139
ARP_EXPORT friend bool operator>(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:97
int GetHour(void) const
Gets the hour of this instance.
Definition: DateTime.cpp:285
ARP_EXPORT friend bool operator!=(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:86
time_t ToUnixTime(void) const
Converts this instance to unix time (UTC).
Definition: DateTime.cpp:330
int GetSecond(void) const
Gets the second of this instance.
Definition: DateTime.cpp:299
ARP_EXPORT friend bool operator<(const DateTime &left, const DateTime &right)
Compares the left DateTime instance to the right one.
Definition: DateTime.cpp:108
bool IsEmpty(void) const
Checks if this instance represents a valid date.
Definition: DateTime.cpp:323
int GetMonth(void) const
Gets the month of this instance.
Definition: DateTime.cpp:271
int GetMicrosecond(void) const
Gets the microsecond of this instance.
Definition: DateTime.cpp:313
ARP_EXPORT friend std::istream & operator>>(std::istream &is, DateTime &value)
Reads the DateTime value from the given input streams in Iso8601 format.
Definition: DateTime.cpp:148
static DateTime FromUnixTime(time_t unixTime)
Creates a DateTime from the as argument passed unix time.
Definition: DateTime.cpp:202
static DateTime FromBinary(Value value)
Creates a DateTime from the as argument passed (internal) binary representation.
Definition: DateTime.cpp:235
static DateTime FromUnixTimeMicroseconds(int64 microseconds)
Creates a DateTime from the as argument passed unix time in microseconds.
Definition: DateTime.cpp:210
std::int64_t int64
The Arp integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:39
std::uint64_t uint64
The Arp unsigned integer type of 8 byte size.
Definition: PrimitiveTypes.hpp:37
Root namespace for the PLCnext API
class ARP_DEPRECATED("Use Arp::Enum<T> instead.") EnumStrings
Deprecated! The class implements an adapter for enums to define the string literals of the enum entri...
Definition: EnumStrings.hxx:38
Namespace of the C++ standard library