QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
qgsdatetimefieldformatter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsdatetimefieldformatter.cpp - QgsDateTimeFieldFormatter
3 
4  ---------------------
5  begin : 2.12.2016
6  copyright : (C) 2016 by Matthias Kuhn
7  email : [email protected]
8  ***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
17 
18 #include "qgssettings.h"
19 #include "qgsfield.h"
20 #include "qgsvectorlayer.h"
21 #include "qgsapplication.h"
22 
23 const QString QgsDateTimeFieldFormatter::DATE_FORMAT = QStringLiteral( "yyyy-MM-dd" );
24 const QString QgsDateTimeFieldFormatter::TIME_FORMAT = QStringLiteral( "HH:mm:ss" );
25 const QString QgsDateTimeFieldFormatter::DATETIME_FORMAT = QStringLiteral( "yyyy-MM-dd HH:mm:ss" );
26 // we need to use Qt::ISODate rather than a string format definition in QDate::fromString
27 const QString QgsDateTimeFieldFormatter::QT_ISO_FORMAT = QStringLiteral( "Qt ISO Date" );
28 // but QDateTimeEdit::setDisplayFormat only accepts string formats, so use with time zone by default
29 const QString QgsDateTimeFieldFormatter::DISPLAY_FOR_ISO_FORMAT = QStringLiteral( "yyyy-MM-dd HH:mm:ss+t" );
30 
31 
33 {
34  return QStringLiteral( "DateTime" );
35 }
36 
37 QString QgsDateTimeFieldFormatter::representValue( QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value ) const
38 {
39  Q_UNUSED( cache )
40 
41  QString result;
42 
43  if ( value.isNull() )
44  {
46  }
47 
48  const QgsField field = layer->fields().at( fieldIndex );
49  const bool fieldIsoFormat = config.value( QStringLiteral( "field_iso_format" ), false ).toBool();
50  const QString fieldFormat = config.value( QStringLiteral( "field_format" ), defaultFormat( field.type() ) ).toString();
51  const QString displayFormat = config.value( QStringLiteral( "display_format" ), defaultFormat( field.type() ) ).toString();
52 
53  QDateTime date;
54  if ( static_cast<QMetaType::Type>( value.type() ) == QMetaType::QDate || static_cast<QMetaType::Type>( value.type() ) == QMetaType::QDateTime )
55  {
56  date = value.toDateTime();
57  }
58  else
59  {
60  if ( fieldIsoFormat )
61  {
62  date = QDateTime::fromString( value.toString(), Qt::ISODate );
63  }
64  else
65  {
66  date = QDateTime::fromString( value.toString(), fieldFormat );
67  }
68  }
69 
70  if ( date.isValid() )
71  {
72  result = date.toString( displayFormat );
73  }
74  else
75  {
76  result = value.toString();
77  }
78 
79  return result;
80 }
81 
82 QString QgsDateTimeFieldFormatter::defaultFormat( QVariant::Type type )
83 {
84  switch ( type )
85  {
86  case QVariant::DateTime:
88  break;
89  case QVariant::Time:
91  break;
92  default:
94  }
95 }
static QString nullRepresentation()
This string is used to represent the value NULL throughout QGIS.
QString representValue(QgsVectorLayer *layer, int fieldIndex, const QVariantMap &config, const QVariant &cache, const QVariant &value) const override
Create a pretty String representation of the value.
QString id() const override
Returns a unique id for this field formatter.
static const QString DISPLAY_FOR_ISO_FORMAT
static const QString DATETIME_FORMAT
static QString defaultFormat(QVariant::Type type)
Gets the default format in function of the type.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:51
QVariant::Type type
Definition: qgsfield.h:58
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
Definition: qgsfields.cpp:163
Represents a vector layer which manages a vector based data sets.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
const QgsField & field
Definition: qgsfield.h:472