QGIS API Documentation  3.8.0-Zanzibar (11aff65)
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 ( fieldIsoFormat )
55  {
56  date = QDateTime::fromString( value.toString(), Qt::ISODate );
57  }
58  else
59  {
60  date = QDateTime::fromString( value.toString(), fieldFormat );
61  }
62 
63  if ( date.isValid() )
64  {
65  result = date.toString( displayFormat );
66  }
67  else
68  {
69  result = value.toString();
70  }
71 
72  return result;
73 }
74 
75 QString QgsDateTimeFieldFormatter::defaultFormat( QVariant::Type type )
76 {
77  switch ( type )
78  {
79  case QVariant::DateTime:
81  break;
82  case QVariant::Time:
84  break;
85  default:
87  }
88 }
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.
static const QString DISPLAY_FOR_ISO_FORMAT
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
Definition: qgsfields.cpp:163
static QString defaultFormat(QVariant::Type type)
Gets the default format in function of the type.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
static const QString DATETIME_FORMAT
QString id() const override
Returns a unique id for this field formatter.
static QString nullRepresentation()
This string is used to represent the value NULL throughout QGIS.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:48
Represents a vector layer which manages a vector based data sets.
QVariant::Type type
Definition: qgsfield.h:56