Qt 4.8
qdatetimefn.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qatomiccomparator_p.h"
43 #include "qcommonvalues_p.h"
44 #include "qschemadatetime_p.h"
45 #include "qdaytimeduration_p.h"
46 #include "qdecimal_p.h"
47 #include "qinteger_p.h"
48 #include "qpatternistlocale_p.h"
49 
50 #include "qdatetimefn_p.h"
51 
53 
54 using namespace QPatternist;
55 
57 {
58  const Item di(m_operands.first()->evaluateSingleton(context));
59  if(!di)
60  return Item();
61 
62  const Item ti(m_operands.last()->evaluateSingleton(context));
63  if(!ti)
64  return Item();
65 
66  QDateTime date(di.as<AbstractDateTime>()->toDateTime());
67  Q_ASSERT(date.isValid());
68  QDateTime time(ti.as<AbstractDateTime>()->toDateTime());
69  Q_ASSERT(time.isValid());
70 
71  if(date.timeSpec() == time.timeSpec() || /* Identical timezone properties. */
72  time.timeSpec() == Qt::LocalTime) /* time has no timezone, but date do. */
73  {
74  date.setTime(time.time());
75  Q_ASSERT(date.isValid());
76  return DateTime::fromDateTime(date);
77  }
78  else if(date.timeSpec() == Qt::LocalTime) /* date has no timezone, but time do. */
79  {
80  time.setDate(date.date());
81  Q_ASSERT(time.isValid());
82  return DateTime::fromDateTime(time);
83  }
84  else
85  {
86  context->error(QtXmlPatterns::tr("If both values have zone offsets, "
87  "they must have the same zone offset. "
88  "%1 and %2 are not the same.")
89  .arg(formatData(di.stringValue()),
90  formatData(di.stringValue())),
92  return Item(); /* Silence GCC warning. */
93  }
94 }
95 
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
Base class for classes implementing values related to time, date or both.
static DateTime::Ptr fromDateTime(const QDateTime &dt)
#define Q_ASSERT(cond)
Definition: qglobal.h:1823
Contains class DateTime. This file was originally called qdatetime_p.h, but various build systems can...
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const
Definition: qdatetimefn.cpp:56
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
void error(const QString &message, const ReportContext::ErrorCode errorCode, const QSourceLocation &sourceLocation)
The namespace for the internal API of QtXmlPatterns.
const QDateTime & toDateTime() const
static QString formatData(const QString &data)
T & first()
Returns a reference to the first item in the list.
Definition: qlist.h:282
Contains functions used for formatting arguments, such as keywords and paths, in translated strings...
The QDateTime class provides date and time functions.
Definition: qdatetime.h:216
Represents an item in the XPath 2.0 Data Model.
Definition: qitem_p.h:182
T & last()
Returns a reference to the last item in the list.
Definition: qlist.h:284
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const