Add DateTime::toIsoStringWithCustomDelimiters()

This commit is contained in:
Martchus 2020-04-11 21:51:52 +02:00
parent 9fe7053869
commit 4b67736adf
3 changed files with 17 additions and 7 deletions

View File

@ -112,8 +112,8 @@ set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
set(META_APP_DESCRIPTION "Useful C++ classes and routines such as argument parser, IO and conversion utilities")
set(META_FEATURES_FOR_COMPILER_DETECTION_HEADER cxx_thread_local)
set(META_VERSION_MAJOR 5)
set(META_VERSION_MINOR 3)
set(META_VERSION_PATCH 1)
set(META_VERSION_MINOR 4)
set(META_VERSION_PATCH 0)
# find required 3rd party libraries
include(3rdParty)

View File

@ -210,14 +210,14 @@ void DateTime::toString(string &result, DateTimeOutputFormat format, bool noMill
}
/*!
* \brief Returns the string representation of the current instance in the ISO format,
* eg. 2016-08-29T21:32:31.588539814+02:00.
* \brief Returns the string representation of the current instance in the ISO format with custom delimiters,
* eg. 2016/08/29T21-32-31.588539814+02:00 with '/' as \a dateDelimiter and '-' as \a timeDelimiter.
*/
string DateTime::toIsoString(TimeSpan timeZoneDelta) const
string DateTime::toIsoStringWithCustomDelimiters(TimeSpan timeZoneDelta, char dateDelimiter, char timeDelimiter, char timeZoneDelimiter) const
{
stringstream s(stringstream::in | stringstream::out);
s << setfill('0');
s << setw(4) << year() << '-' << setw(2) << month() << '-' << setw(2) << day() << 'T' << setw(2) << hour() << ':' << setw(2) << minute() << ':'
s << setw(4) << year() << dateDelimiter << setw(2) << month() << dateDelimiter << setw(2) << day() << 'T' << setw(2) << hour() << timeDelimiter << setw(2) << minute() << timeDelimiter
<< setw(2) << second();
const int milli(millisecond());
const int micro(microsecond());
@ -238,11 +238,20 @@ string DateTime::toIsoString(TimeSpan timeZoneDelta) const
} else {
s << '+';
}
s << setw(2) << timeZoneDelta.hours() << ':' << setw(2) << timeZoneDelta.minutes();
s << setw(2) << timeZoneDelta.hours() << timeZoneDelimiter << setw(2) << timeZoneDelta.minutes();
}
return s.str();
}
/*!
* \brief Returns the string representation of the current instance in the ISO format,
* eg. 2016-08-29T21:32:31.588539814+02:00.
*/
string DateTime::toIsoString(TimeSpan timeZoneDelta) const
{
return toIsoStringWithCustomDelimiters(timeZoneDelta);
}
/*!
* \brief Returns the string representation as C-style string for the given day of week.
*

View File

@ -85,6 +85,7 @@ public:
constexpr bool isSameDay(const DateTime &other) const;
std::string toString(DateTimeOutputFormat format = DateTimeOutputFormat::DateAndTime, bool noMilliseconds = false) const;
void toString(std::string &result, DateTimeOutputFormat format = DateTimeOutputFormat::DateAndTime, bool noMilliseconds = false) const;
std::string toIsoStringWithCustomDelimiters(TimeSpan timeZoneDelta = TimeSpan(), char dateDelimiter = '-', char timeDelimiter = ':', char timeZoneDelimiter = ':') const;
std::string toIsoString(TimeSpan timeZoneDelta = TimeSpan()) const;
constexpr std::time_t toTimeStamp() const;
static const char *printDayOfWeek(DayOfWeek dayOfWeek, bool abbreviation = false);