Qt5 support date format enum (#9283)

* initial commit

* Update sample and make sure it builds

* PR feedback

* Limit scope of struct to within the class and fix whitespace
This commit is contained in:
Sean Kelly
2021-04-20 18:55:30 -07:00
committed by GitHub
parent 41f586bede
commit ef2299ad65
4 changed files with 148 additions and 28 deletions

View File

@@ -9,47 +9,83 @@ namespace {{this}} {
class {{prefix}}SerializerSettings {
public:
static void setDateTimeFormat(const QString & dtFormat){
getInstance()->dateTimeFormat = dtFormat;
struct CustomDateTimeFormat{
bool isStringSet = false;
QString formatString;
bool isEnumSet = false;
Qt::DateFormat formatEnum;
};
static CustomDateTimeFormat getCustomDateTimeFormat() {
return getInstance()->customDateTimeFormat;
}
static QString getDateTimeFormat() {
return getInstance()->dateTimeFormat;
static void setDateTimeFormatString(const QString &dtFormat){
getInstance()->customDateTimeFormat.isStringSet = true;
getInstance()->customDateTimeFormat.isEnumSet = false;
getInstance()->customDateTimeFormat.formatString = dtFormat;
}
static void setDateTimeFormatEnum(const Qt::DateFormat &dtFormat){
getInstance()->customDateTimeFormat.isEnumSet = true;
getInstance()->customDateTimeFormat.isStringSet = false;
getInstance()->customDateTimeFormat.formatEnum = dtFormat;
}
static {{prefix}}SerializerSettings *getInstance(){
if(instance == nullptr){
instance = new {{prefix}}SerializerSettings();
}
return instance;
}
private:
explicit {{prefix}}SerializerSettings(){
instance = this;
dateTimeFormat.clear();
customDateTimeFormat.isStringSet = false;
customDateTimeFormat.isEnumSet = false;
}
static {{prefix}}SerializerSettings *instance;
QString dateTimeFormat;
CustomDateTimeFormat customDateTimeFormat;
};
{{prefix}}SerializerSettings * {{prefix}}SerializerSettings::instance = nullptr;
bool setDateTimeFormat(const QString& dateTimeFormat){
bool setDateTimeFormat(const QString &dateTimeFormat){
bool success = false;
auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat);
if(dt.isValid()){
if (dt.isValid()) {
success = true;
{{prefix}}SerializerSettings::setDateTimeFormat(dateTimeFormat);
{{prefix}}SerializerSettings::setDateTimeFormatString(dateTimeFormat);
}
return success;
}
bool setDateTimeFormat(const Qt::DateFormat &dateTimeFormat){
bool success = false;
auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat);
if (dt.isValid()) {
success = true;
{{prefix}}SerializerSettings::setDateTimeFormatEnum(dateTimeFormat);
}
return success;
}
QString toStringValue(const QString &value) {
return value;
}
QString toStringValue(const QDateTime &value) {
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
return value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
}
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
return value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
}
// ISO 8601
return {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()? value.toString(Qt::ISODate):value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat());
return value.toString(Qt::ISODate);
}
QString toStringValue(const QByteArray &value) {
@@ -98,7 +134,16 @@ QJsonValue toJsonValue(const QString &value) {
}
QJsonValue toJsonValue(const QDateTime &value) {
return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?value.toString(Qt::ISODate):value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat())));
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString));
}
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum));
}
// ISO 8601
return QJsonValue(value.toString(Qt::ISODate));
}
QJsonValue toJsonValue(const QByteArray &value) {
@@ -151,7 +196,15 @@ bool fromStringValue(const QString &inStr, QDateTime &value) {
if (inStr.isEmpty()) {
return false;
} else {
auto dateTime = {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(inStr, Qt::ISODate) :QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat());
QDateTime dateTime;
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
dateTime = QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
} else if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
dateTime = QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
} else {
dateTime = QDateTime::fromString(inStr, Qt::ISODate);
}
if (dateTime.isValid()) {
value.setDate(dateTime.date());
value.setTime(dateTime.time());
@@ -256,7 +309,13 @@ bool fromJsonValue(QString &value, const QJsonValue &jval) {
bool fromJsonValue(QDateTime &value, const QJsonValue &jval) {
bool ok = true;
if (!jval.isUndefined() && !jval.isNull() && jval.isString()) {
value = {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(jval.toString(), Qt::ISODate): QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat());
if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
value = QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
} else if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
value = QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
} else {
value = QDateTime::fromString(jval.toString(), Qt::ISODate);
}
ok = value.isValid();
} else {
ok = false;

View File

@@ -42,7 +42,8 @@ public:
}
};
bool setDateTimeFormat(const QString&);
bool setDateTimeFormat(const QString &format);
bool setDateTimeFormat(const Qt::DateFormat &format);
template <typename T>
QString toStringValue(const QList<T> &val);

View File

@@ -17,47 +17,83 @@ namespace test_namespace {
class PFXSerializerSettings {
public:
static void setDateTimeFormat(const QString & dtFormat){
getInstance()->dateTimeFormat = dtFormat;
struct CustomDateTimeFormat{
bool isStringSet = false;
QString formatString;
bool isEnumSet = false;
Qt::DateFormat formatEnum;
};
static CustomDateTimeFormat getCustomDateTimeFormat() {
return getInstance()->customDateTimeFormat;
}
static QString getDateTimeFormat() {
return getInstance()->dateTimeFormat;
static void setDateTimeFormatString(const QString &dtFormat){
getInstance()->customDateTimeFormat.isStringSet = true;
getInstance()->customDateTimeFormat.isEnumSet = false;
getInstance()->customDateTimeFormat.formatString = dtFormat;
}
static void setDateTimeFormatEnum(const Qt::DateFormat &dtFormat){
getInstance()->customDateTimeFormat.isEnumSet = true;
getInstance()->customDateTimeFormat.isStringSet = false;
getInstance()->customDateTimeFormat.formatEnum = dtFormat;
}
static PFXSerializerSettings *getInstance(){
if(instance == nullptr){
instance = new PFXSerializerSettings();
}
return instance;
}
private:
explicit PFXSerializerSettings(){
instance = this;
dateTimeFormat.clear();
customDateTimeFormat.isStringSet = false;
customDateTimeFormat.isEnumSet = false;
}
static PFXSerializerSettings *instance;
QString dateTimeFormat;
CustomDateTimeFormat customDateTimeFormat;
};
PFXSerializerSettings * PFXSerializerSettings::instance = nullptr;
bool setDateTimeFormat(const QString& dateTimeFormat){
bool setDateTimeFormat(const QString &dateTimeFormat){
bool success = false;
auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat);
if(dt.isValid()){
if (dt.isValid()) {
success = true;
PFXSerializerSettings::setDateTimeFormat(dateTimeFormat);
PFXSerializerSettings::setDateTimeFormatString(dateTimeFormat);
}
return success;
}
bool setDateTimeFormat(const Qt::DateFormat &dateTimeFormat){
bool success = false;
auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat);
if (dt.isValid()) {
success = true;
PFXSerializerSettings::setDateTimeFormatEnum(dateTimeFormat);
}
return success;
}
QString toStringValue(const QString &value) {
return value;
}
QString toStringValue(const QDateTime &value) {
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
return value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
}
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
return value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
}
// ISO 8601
return PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()? value.toString(Qt::ISODate):value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat());
return value.toString(Qt::ISODate);
}
QString toStringValue(const QByteArray &value) {
@@ -106,7 +142,16 @@ QJsonValue toJsonValue(const QString &value) {
}
QJsonValue toJsonValue(const QDateTime &value) {
return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?value.toString(Qt::ISODate):value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat())));
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString));
}
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum));
}
// ISO 8601
return QJsonValue(value.toString(Qt::ISODate));
}
QJsonValue toJsonValue(const QByteArray &value) {
@@ -159,7 +204,15 @@ bool fromStringValue(const QString &inStr, QDateTime &value) {
if (inStr.isEmpty()) {
return false;
} else {
auto dateTime = PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(inStr, Qt::ISODate) :QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getDateTimeFormat());
QDateTime dateTime;
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
dateTime = QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
} else if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
dateTime = QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
} else {
dateTime = QDateTime::fromString(inStr, Qt::ISODate);
}
if (dateTime.isValid()) {
value.setDate(dateTime.date());
value.setTime(dateTime.time());
@@ -264,7 +317,13 @@ bool fromJsonValue(QString &value, const QJsonValue &jval) {
bool fromJsonValue(QDateTime &value, const QJsonValue &jval) {
bool ok = true;
if (!jval.isUndefined() && !jval.isNull() && jval.isString()) {
value = PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(jval.toString(), Qt::ISODate): QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getDateTimeFormat());
if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) {
value = QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString);
} else if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) {
value = QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum);
} else {
value = QDateTime::fromString(jval.toString(), Qt::ISODate);
}
ok = value.isValid();
} else {
ok = false;

View File

@@ -50,7 +50,8 @@ public:
}
};
bool setDateTimeFormat(const QString&);
bool setDateTimeFormat(const QString &format);
bool setDateTimeFormat(const Qt::DateFormat &format);
template <typename T>
QString toStringValue(const QList<T> &val);