[Libreoffice-commits] core.git: Branch 'libreoffice-4-1' - comphelper/source connectivity/source extensions/source forms/source offapi/com offapi/type_reference offapi/UnoApi_offapi.mk oox/source qadevOOo/tests reportdesign/source sax/qa sax/source sc/source sd/source sfx2/source svl/source svtools/source sw/source toolkit/source ucb/source unotools/source writerfilter/source xmloff/source

Michael Stahl mstahl at redhat.com
Mon Jul 15 07:58:40 PDT 2013


 comphelper/source/misc/anycompare.cxx                               |    3 
 connectivity/source/commontools/dbconversion.cxx                    |    5 
 connectivity/source/drivers/file/FDateFunctions.cxx                 |   10 
 connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx |    5 
 connectivity/source/drivers/odbcbase/OResultSet.cxx                 |    5 
 extensions/source/propctrlr/standardcontrol.cxx                     |    3 
 forms/source/xforms/convert.cxx                                     |   10 
 offapi/UnoApi_offapi.mk                                             |    3 
 offapi/com/sun/star/util/Date.idl                                   |    3 
 offapi/com/sun/star/util/DateTime.idl                               |    7 
 offapi/com/sun/star/util/DateTimeRange.idl                          |    8 
 offapi/com/sun/star/util/DateTimeWithTimezone.idl                   |   43 ++
 offapi/com/sun/star/util/DateWithTimezone.idl                       |   43 ++
 offapi/com/sun/star/util/Time.idl                                   |    7 
 offapi/com/sun/star/util/TimeWithTimezone.idl                       |   44 ++
 offapi/type_reference/offapi.rdb                                    |binary
 oox/source/docprop/docprophandler.cxx                               |    4 
 qadevOOo/tests/java/ifc/sdbc/_XParameters.java                      |    4 
 reportdesign/source/core/sdr/RptObject.cxx                          |    3 
 sax/qa/cppunit/test_converter.cxx                                   |   63 +--
 sax/source/tools/converter.cxx                                      |  204 ++++++++--
 sc/source/filter/oox/unitconverter.cxx                              |    2 
 sd/source/ui/annotations/annotationmanager.cxx                      |    5 
 sfx2/source/appl/sfxpicklist.cxx                                    |    2 
 sfx2/source/dialog/dinfdlg.cxx                                      |   16 
 sfx2/source/doc/SfxDocumentMetaData.cxx                             |    5 
 sfx2/source/doc/objcont.cxx                                         |    4 
 sfx2/source/doc/oleprops.cxx                                        |   13 
 sfx2/source/view/viewprn.cxx                                        |    2 
 svl/source/items/dateitem.cxx                                       |    4 
 svtools/source/misc/templatefoldercache.cxx                         |    3 
 svtools/source/svhtml/parhtml.cxx                                   |    3 
 sw/source/core/doc/docglbl.cxx                                      |    3 
 sw/source/filter/ww8/ww8par.cxx                                     |    2 
 toolkit/source/controls/unocontrols.cxx                             |    2 
 ucb/source/ucp/ftp/ftpdirp.hxx                                      |    3 
 ucb/source/ucp/gio/gio_content.cxx                                  |    2 
 unotools/source/misc/datetime.cxx                                   |    3 
 writerfilter/source/rtftok/rtfdocumentimpl.cxx                      |    2 
 xmloff/source/chart/SchXMLExport.cxx                                |    2 
 40 files changed, 446 insertions(+), 109 deletions(-)

New commits:
commit dd780228cca25dc818ca7fdb628ff607c109618e
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 28 00:43:19 2013 +0200

    i#108348 API CHANGE: add IsUTC to css.util.DateTime etc.
    
    Add IsUTC member to:
    
    com.sun.star.util.DateTime
    com.sun.star.util.DateTimeRange
    com.sun.star.util.Time
    
    Add new stucts with explicit time zones:
    
    com.sun.star.util.DateTimeWithTimezone
    com.sun.star.util.DateWithTimezone
    com.sun.star.util.TimeWithTimezone
    
    Adapt the sax::Converter to read/write timezones, and fix the unit test.
    
    Everything else just uses default (no time zone), this commit is just
    to fix the API.
    
    STRUCT: /UCR/com/sun/star/util/DateTime
        nFields1 = 7  !=  nFields2 = 8
        Registry2 contains 1 more fields
    STRUCT: /UCR/com/sun/star/util/DateTimeRange
        nFields1 = 14  !=  nFields2 = 15
        Registry2 contains 1 more fields
    STRUCT: /UCR/com/sun/star/util/Time
        nFields1 = 4  !=  nFields2 = 5
        Registry2 contains 1 more fields
    
    Conflicts:
    	sc/source/filter/oox/unitconverter.cxx
    
    Reviewed-on: https://gerrit.libreoffice.org/4833
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>
    (cherry picked from commit 652ccbdf3111766fadc379a8cf4650b744e1e19c)
    
    i#108348: fix TimeZone -> Timezone in struct names
    
    (cherry picked from commit 604aae1fd240254fe851d93dc35b5408bd13296c)
    
    Signed-off-by: Michael Stahl <mstahl at redhat.com>
    Signed-off-by: Lionel Elie Mamane <lionel at mamane.lu>
    Signed-off-by: Michael Meeks <michael.meeks at suse.com>
    
    Conflicts:
    	forms/source/xforms/convert.cxx
    	offapi/type_reference/offapi.rdb
    	reportdesign/source/core/sdr/RptObject.cxx
    	sc/source/filter/oox/unitconverter.cxx

diff --git a/comphelper/source/misc/anycompare.cxx b/comphelper/source/misc/anycompare.cxx
index 775386e..30e805a 100644
--- a/comphelper/source/misc/anycompare.cxx
+++ b/comphelper/source/misc/anycompare.cxx
@@ -70,6 +70,7 @@ namespace comphelper
                 ||  !( _rhs >>= rhs )
                 )
                 throw ::com::sun::star::lang::IllegalArgumentException();
+            // FIXME Timezone?
 
             if ( lhs.Year < rhs.Year )
                 return true;
@@ -100,6 +101,7 @@ namespace comphelper
                 ||  !( _rhs >>= rhs )
                 )
                 throw ::com::sun::star::lang::IllegalArgumentException();
+            // FIXME Timezone?
 
             if ( lhs.Hours < rhs.Hours )
                 return true;
@@ -135,6 +137,7 @@ namespace comphelper
                 ||  !( _rhs >>= rhs )
                 )
                 throw ::com::sun::star::lang::IllegalArgumentException();
+            // FIXME Timezone?
 
             if ( lhs.Year < rhs.Year )
                 return true;
diff --git a/connectivity/source/commontools/dbconversion.cxx b/connectivity/source/commontools/dbconversion.cxx
index 73b7638..0b04dbd 100644
--- a/connectivity/source/commontools/dbconversion.cxx
+++ b/connectivity/source/commontools/dbconversion.cxx
@@ -102,7 +102,8 @@ namespace dbtools
         utl::Date aDate(_rDateTime.Day,_rDateTime.Month,_rDateTime.Year);
         OUStringBuffer aTemp(toDateString(aDate));
         aTemp.appendAscii(" ");
-        utl::Time aTime(_rDateTime.NanoSeconds,_rDateTime.Seconds,_rDateTime.Minutes,_rDateTime.Hours);
+        utl::Time const aTime(_rDateTime.NanoSeconds, _rDateTime.Seconds,
+                _rDateTime.Minutes, _rDateTime.Hours, _rDateTime.IsUTC);
         aTemp.append( toTimeString(aTime) );
         return  aTemp.makeStringAndClear();
     }
@@ -452,7 +453,7 @@ namespace dbtools
             aTime = toTime( _sSQLString.copy( nSeparation ) );
 
         return utl::DateTime(aTime.NanoSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours,
-                        aDate.Day, aDate.Month, aDate.Year);
+                        aDate.Day, aDate.Month, aDate.Year, false);
     }
 
     //-----------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/file/FDateFunctions.cxx b/connectivity/source/drivers/file/FDateFunctions.cxx
index a24c46d..1bea9fe 100644
--- a/connectivity/source/drivers/file/FDateFunctions.cxx
+++ b/connectivity/source/drivers/file/FDateFunctions.cxx
@@ -263,7 +263,9 @@ ORowSetValue OOp_CurTime::operate(const ::std::vector<ORowSetValue>& lhs) const
         return ORowSetValue();
 
     Time aCurTime( Time::SYSTEM );
-    return ::com::sun::star::util::Time(aCurTime.GetNanoSec(),aCurTime.GetSec(),aCurTime.GetMin(),aCurTime.GetHour());
+    return ::com::sun::star::util::Time(aCurTime.GetNanoSec(),
+            aCurTime.GetSec(), aCurTime.GetMin(), aCurTime.GetHour(),
+            false);
 }
 //------------------------------------------------------------------
 ORowSetValue OOp_Now::operate(const ::std::vector<ORowSetValue>& lhs) const
@@ -272,8 +274,10 @@ ORowSetValue OOp_Now::operate(const ::std::vector<ORowSetValue>& lhs) const
         return ORowSetValue();
 
     DateTime aCurTime( DateTime::SYSTEM );
-    return ::com::sun::star::util::DateTime(aCurTime.GetNanoSec(),aCurTime.GetSec(),aCurTime.GetMin(),aCurTime.GetHour(),
-                                            aCurTime.GetDay(),aCurTime.GetMonth(),aCurTime.GetYear());
+    return ::com::sun::star::util::DateTime(aCurTime.GetNanoSec(),
+            aCurTime.GetSec(), aCurTime.GetMin(), aCurTime.GetHour(),
+            aCurTime.GetDay(), aCurTime.GetMonth(), aCurTime.GetYear(),
+            false);
 }
 //------------------------------------------------------------------
 
diff --git a/connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx b/connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx
index fec060d..fbb1b59 100644
--- a/connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx
+++ b/connectivity/source/drivers/odbcbase/ODatabaseMetaDataResultSet.cxx
@@ -418,7 +418,7 @@ OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex )
         OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,m_pConnection->useOldDateFormat() ? SQL_C_TIME : SQL_C_TYPE_TIME,m_bWasNull,**this,&aTime,sizeof aTime);
     else
         m_bWasNull = sal_True;
-    return Time(0,aTime.second,aTime.minute,aTime.hour);
+    return Time(0, aTime.second,aTime.minute,aTime.hour, false);
 }
 // -------------------------------------------------------------------------
 
@@ -436,7 +436,8 @@ OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex )
         OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,m_pConnection->useOldDateFormat() ? SQL_C_TIMESTAMP : SQL_C_TYPE_TIMESTAMP,m_bWasNull,**this,&aTime,sizeof aTime);
     else
         m_bWasNull = sal_True;
-    return DateTime(aTime.fraction,aTime.second,aTime.minute,aTime.hour,aTime.day,aTime.month,aTime.year);
+    return DateTime(aTime.fraction, aTime.second, aTime.minute, aTime.hour,
+            aTime.day, aTime.month, aTime.year, false);
 }
 // -------------------------------------------------------------------------
 
diff --git a/connectivity/source/drivers/odbcbase/OResultSet.cxx b/connectivity/source/drivers/odbcbase/OResultSet.cxx
index 211ba70..9d77984 100644
--- a/connectivity/source/drivers/odbcbase/OResultSet.cxx
+++ b/connectivity/source/drivers/odbcbase/OResultSet.cxx
@@ -651,7 +651,7 @@ Time OResultSet::impl_getTime( sal_Int32 columnIndex ) throw(SQLException, Runti
     TIME_STRUCT aTime = impl_getValue< TIME_STRUCT > ( columnIndex,
                                                       m_pStatement->getOwnConnection()->useOldDateFormat() ? SQL_C_TIME : SQL_C_TYPE_TIME );
 
-    return Time(0,aTime.second,aTime.minute,aTime.hour);
+    return Time(0, aTime.second,aTime.minute,aTime.hour, false);
 }
 Time SAL_CALL OResultSet::getTime( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
 {
@@ -669,7 +669,8 @@ DateTime OResultSet::impl_getTimestamp( sal_Int32 columnIndex ) throw(SQLExcepti
                     aTime.hour,
                     aTime.day,
                     aTime.month,
-                    aTime.year);
+                    aTime.year,
+                    false);
 }
 DateTime SAL_CALL OResultSet::getTimestamp( sal_Int32 columnIndex ) throw(SQLException, RuntimeException)
 {
diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx
index 60f533a..13ae977 100644
--- a/extensions/source/propctrlr/standardcontrol.cxx
+++ b/extensions/source/propctrlr/standardcontrol.cxx
@@ -99,7 +99,8 @@ namespace pcr
         if ( !getTypedControlWindow()->GetText().isEmpty() )
         {
             ::Time aTime( getTypedControlWindow()->GetTime() );
-            util::Time aUNOTime( aTime.GetNanoSec(), aTime.GetSec(), aTime.GetMin(), aTime.GetHour() );
+            util::Time const aUNOTime( aTime.GetNanoSec(), aTime.GetSec(),
+                    aTime.GetMin(), aTime.GetHour(), false );
             aPropValue <<= aUNOTime;
         }
         return aPropValue;
diff --git a/forms/source/xforms/convert.cxx b/forms/source/xforms/convert.cxx
index 6dac929..9fd09fd 100644
--- a/forms/source/xforms/convert.cxx
+++ b/forms/source/xforms/convert.cxx
@@ -342,7 +342,7 @@ namespace
     {
         bool bWellformed = true;
 
-        UNOTime aTime( 0, 0, 0, 0 );
+        UNOTime aTime;
 
         bWellformed = ISO8601parseTime(rString, aTime);
 
@@ -366,7 +366,7 @@ namespace
 
         // all okay?
         if ( !bWellformed )
-            return UNOTime( 0, 0, 0, 0 );
+            return UNOTime();
 
         return aTime;
     }
@@ -386,7 +386,8 @@ namespace
         UNODate aDate( aDateTime.Day, aDateTime.Month, aDateTime.Year );
         OUString sDate = lcl_toXSD_UNODate_typed( aDate );
 
-        UNOTime aTime( aDateTime.NanoSeconds, aDateTime.Seconds, aDateTime.Minutes, aDateTime.Hours );
+        UNOTime const aTime( aDateTime.NanoSeconds, aDateTime.Seconds,
+                    aDateTime.Minutes, aDateTime.Hours, aDateTime.IsUTC);
         OUString sTime = lcl_toXSD_UNOTime_typed( aTime );
 
         OUStringBuffer sInfo;
@@ -409,7 +410,6 @@ namespace
         if ( nDateTimeSep == -1 )
         {   // no time part
             aDate = lcl_toUNODate( rString );
-            aTime = UNOTime( 0, 0, 0, 0 );
         }
         else
         {
@@ -418,7 +418,7 @@ namespace
         }
         UNODateTime aDateTime(
             aTime.NanoSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours,
-            aDate.Day, aDate.Month, aDate.Year
+            aDate.Day, aDate.Month, aDate.Year, aTime.IsUTC
         );
         return makeAny( aDateTime );
     }
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 4ebb043..50e68bc 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -4020,7 +4020,9 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/util,\
 	DataEditorEvent \
 	DataEditorEventType \
 	Date \
+	DateWithTimezone \
 	DateTime \
+	DateTimeWithTimezone \
 	DateTimeRange \
 	Duration \
 	ElementChange \
@@ -4041,6 +4043,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/util,\
 	SortField \
 	SortFieldType \
 	Time \
+	TimeWithTimezone \
 	TriState \
 	URL \
 	VetoException \
diff --git a/offapi/com/sun/star/util/Date.idl b/offapi/com/sun/star/util/Date.idl
index f8bc2dd..7b38b05 100644
--- a/offapi/com/sun/star/util/Date.idl
+++ b/offapi/com/sun/star/util/Date.idl
@@ -20,11 +20,12 @@
 #define __com_sun_star_util_Date_idl__
 
 
-
 module com {  module sun {  module star {  module util {
 
 
 /** represents a date value.
+
+    The time zone is unknown.
  */
 published struct Date
 {
diff --git a/offapi/com/sun/star/util/DateTime.idl b/offapi/com/sun/star/util/DateTime.idl
index 397f9d7..443e620 100644
--- a/offapi/com/sun/star/util/DateTime.idl
+++ b/offapi/com/sun/star/util/DateTime.idl
@@ -20,7 +20,6 @@
 #define __com_sun_star_util_DateTime_idl__
 
 
-
 module com {  module sun {  module star {  module util {
 
 
@@ -61,7 +60,11 @@ published struct DateTime
      */
     short Year;
 
-    /** TODO: timezone **/
+    /** true: time zone is UTC false: unknown time zone.
+
+        @since LibreOffice 4.1
+     */
+    boolean IsUTC;
 
 };
 
diff --git a/offapi/com/sun/star/util/DateTimeRange.idl b/offapi/com/sun/star/util/DateTimeRange.idl
index 0e01883..12aea4f 100644
--- a/offapi/com/sun/star/util/DateTimeRange.idl
+++ b/offapi/com/sun/star/util/DateTimeRange.idl
@@ -20,7 +20,6 @@
 #define __com_sun_star_util_DateTimeRange_idl__
 
 
-
 module com {  module sun {  module star {  module util {
 
 
@@ -84,7 +83,12 @@ published struct DateTimeRange
      */
     short EndYear;
 
-    /** TODO timezones **/
+    /** true: time zone is UTC false: unknown time zone.
+
+        @since LibreOffice 4.1
+     */
+    boolean IsUTC;
+
 };
 
 
diff --git a/offapi/com/sun/star/util/DateTimeWithTimezone.idl b/offapi/com/sun/star/util/DateTimeWithTimezone.idl
new file mode 100644
index 0000000..398ed5e
--- /dev/null
+++ b/offapi/com/sun/star/util/DateTimeWithTimezone.idl
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __com_sun_star_util_DateTimeTZ_idl__
+#define __com_sun_star_util_DateTimeTZ_idl__
+
+#include <com/sun/star/util/DateTime.idl>
+
+
+module com {  module sun {  module star {  module util {
+
+/** represents a combined date+time value with time zone.
+
+    @since LibreOffice 4.1
+ */
+struct DateTimeWithTimezone
+{
+    /** the date and time (in TimeZone)
+    */
+    DateTime DateTimeInTZ;
+
+    /** contains the time zone, as signed offset in minutes *from* UTC,
+        that is *east* of UTC, that is the amount of minutes that should
+        be added to UTC time to obtain the time in that timezone.
+
+        To obtain UTC datetime from DateTimeInTZ, you need to *subtract*
+        TimeZone minutes.
+    */
+    short Timezone;
+};
+
+
+}; }; }; };
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/offapi/com/sun/star/util/DateWithTimezone.idl b/offapi/com/sun/star/util/DateWithTimezone.idl
new file mode 100644
index 0000000..e60bcb7
--- /dev/null
+++ b/offapi/com/sun/star/util/DateWithTimezone.idl
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __com_sun_star_util_DateTZ_idl__
+#define __com_sun_star_util_DateTZ_idl__
+
+#include <com/sun/star/util/Date.idl>
+
+
+module com {  module sun {  module star {  module util {
+
+/** represents a date value with time zone.
+
+    @since LibreOffice 4.1
+ */
+struct DateWithTimezone
+{
+    /** the date.
+        @note XMLSchema-2 defines this as a 24 hour interval.
+              The TimeZone shifts the interval along the UTC time line.
+    */
+    Date DateInTZ;
+
+    /** contains the time zone, as signed offset in minutes *from* UTC,
+        that is *east* of UTC, that is the amount of minutes that should
+        be added to UTC time to obtain time in that timezone.
+    */
+    short Timezone;
+};
+
+
+}; }; }; };
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/offapi/com/sun/star/util/Time.idl b/offapi/com/sun/star/util/Time.idl
index fce062d..31a67b3 100644
--- a/offapi/com/sun/star/util/Time.idl
+++ b/offapi/com/sun/star/util/Time.idl
@@ -20,7 +20,6 @@
 #define __com_sun_star_util_Time_idl__
 
 
-
 module com {  module sun {  module star {  module util {
 
 
@@ -44,6 +43,12 @@ published struct Time
      */
     unsigned short Hours;
 
+    /** true: time zone is UTC false: unknown time zone.
+
+        @since LibreOffice 4.1
+     */
+    boolean IsUTC;
+
 };
 
 
diff --git a/offapi/com/sun/star/util/TimeWithTimezone.idl b/offapi/com/sun/star/util/TimeWithTimezone.idl
new file mode 100644
index 0000000..70442ec
--- /dev/null
+++ b/offapi/com/sun/star/util/TimeWithTimezone.idl
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __com_sun_star_util_TimeTZ_idl__
+#define __com_sun_star_util_TimeTZ_idl__
+
+#include <com/sun/star/util/Time.idl>
+
+
+module com {  module sun {  module star {  module util {
+
+/** represents a combined time value with time zone.
+
+    @since LibreOffice 4.1
+ */
+struct TimeWithTimezone
+{
+    /** the time (in TimeZone)
+    */
+    Time TimeInTZ;
+
+    /** contains the time zone, as signed offset in minutes *from* UTC,
+        that is *east* of UTC, that is the amount of minutes that should
+        be added to UTC time to obtain the time in that timezone.
+
+        To obtain UTC time from TimeInTZ, you need to *subtract* TimeZone
+        minutes.
+    */
+    short Timezone;
+};
+
+
+}; }; }; };
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/offapi/type_reference/offapi.rdb b/offapi/type_reference/offapi.rdb
index f2d883f..51c80d3 100644
Binary files a/offapi/type_reference/offapi.rdb and b/offapi/type_reference/offapi.rdb differ
diff --git a/oox/source/docprop/docprophandler.cxx b/oox/source/docprop/docprophandler.cxx
index 974e5ab..6f15245 100644
--- a/oox/source/docprop/docprophandler.cxx
+++ b/oox/source/docprop/docprophandler.cxx
@@ -153,7 +153,9 @@ util::DateTime OOXMLDocPropHandler::GetDateTimeFromW3CDTF( const OUString& aChar
         }
     }
 
-    return util::DateTime( aOslDTime.NanoSeconds, aOslDTime.Seconds, aOslDTime.Minutes, aOslDTime.Hours, aOslDTime.Day, aOslDTime.Month, aOslDTime.Year );
+    return util::DateTime( aOslDTime.NanoSeconds, aOslDTime.Seconds,
+            aOslDTime.Minutes, aOslDTime.Hours,
+            aOslDTime.Day, aOslDTime.Month, aOslDTime.Year, false);
 }
 
 // ------------------------------------------------
diff --git a/qadevOOo/tests/java/ifc/sdbc/_XParameters.java b/qadevOOo/tests/java/ifc/sdbc/_XParameters.java
index e9d9774..9f97542 100644
--- a/qadevOOo/tests/java/ifc/sdbc/_XParameters.java
+++ b/qadevOOo/tests/java/ifc/sdbc/_XParameters.java
@@ -357,7 +357,7 @@ public class _XParameters extends MultiMethodTest {
         else {
             try {
                 oObj.setTime(
-                    idx, new Time((short)1,(short)2,(short)3,(short)44)) ;
+                    idx, new Time((short)1,(short)2,(short)3,(short)44, false));
             } catch (SQLException e) {
                 log.println("Unexpected SQL exception:") ;
                 log.println(e) ;
@@ -379,7 +379,7 @@ public class _XParameters extends MultiMethodTest {
         else {
             try {
                 oObj.setTimestamp(idx, new DateTime((short)1,(short)2,(short)3,
-                    (short)4, (short)19, (short)01, (short)1979)) ;
+                    (short)4, (short)19, (short)01, (short)1979, false)) ;
             } catch (SQLException e) {
                 log.println("Unexpected SQL exception:") ;
                 log.println(e) ;
diff --git a/reportdesign/source/core/sdr/RptObject.cxx b/reportdesign/source/core/sdr/RptObject.cxx
index ad3b0c2..b852cc4 100644
--- a/reportdesign/source/core/sdr/RptObject.cxx
+++ b/reportdesign/source/core/sdr/RptObject.cxx
@@ -1238,7 +1238,8 @@ void OOle2Obj::initializeOle()
         {
             uno::Reference< beans::XPropertySet > xChartProps( xCompSupp->getComponent(), uno::UNO_QUERY );
             if ( xChartProps.is() )
-                xChartProps->setPropertyValue(OUString("NullDate"),uno::makeAny(util::DateTime(0,0,0,0,1,1,1900)));
+                xChartProps->setPropertyValue(OUString("NullDate"),
+                    uno::makeAny(util::DateTime(0,0,0,0,1,1,1900,false)));
         }
     }
 }
diff --git a/sax/qa/cppunit/test_converter.cxx b/sax/qa/cppunit/test_converter.cxx
index 8a5f728..cfda248 100644
--- a/sax/qa/cppunit/test_converter.cxx
+++ b/sax/qa/cppunit/test_converter.cxx
@@ -157,7 +157,8 @@ static bool eqDateTime(util::DateTime a, util::DateTime b) {
     return a.Year == b.Year && a.Month == b.Month && a.Day == b.Day
         && a.Hours == b.Hours && a.Minutes == b.Minutes
         && a.Seconds == b.Seconds
-        && a.NanoSeconds == b.NanoSeconds;
+        && a.NanoSeconds == b.NanoSeconds
+        && a.IsUTC == b.IsUTC;
 }
 
 static void doTest(util::DateTime const & rdt, char const*const pis,
@@ -168,13 +169,14 @@ static void doTest(util::DateTime const & rdt, char const*const pis,
     util::DateTime odt;
     SAL_INFO("sax.cppunit","about to convert '" << is << "'");
     bool bSuccess( Converter::convertDateTime(odt, is) );
-    SAL_INFO("sax.cppunit","Y:" << odt.Year << " M:" << odt.Month << " D:" << odt.Day << "  H:" << odt.Hours << " M:" << odt.Minutes << " S:" << odt.Seconds << " nS:" << odt.NanoSeconds);
+    SAL_INFO("sax.cppunit","Y:" << odt.Year << " M:" << odt.Month << " D:" << odt.Day << "  H:" << odt.Hours << " M:" << odt.Minutes << " S:" << odt.Seconds << " nS:" << odt.NanoSeconds << " UTC: " << (bool)odt.IsUTC);
     CPPUNIT_ASSERT(bSuccess);
     CPPUNIT_ASSERT(eqDateTime(rdt, odt));
     OUStringBuffer buf;
     Converter::convertDateTime(buf, odt, true);
     SAL_INFO("sax.cppunit","" << buf.getStr());
-    CPPUNIT_ASSERT(buf.makeStringAndClear().equalsAscii(pos));
+    CPPUNIT_ASSERT_EQUAL(OUString::createFromAscii(pos),
+                         buf.makeStringAndClear());
 }
 
 static void doTestDateTimeF(char const*const pis)
@@ -189,43 +191,42 @@ static void doTestDateTimeF(char const*const pis)
 void ConverterTest::testDateTime()
 {
     SAL_INFO("sax.cppunit","\nSAX CONVERTER TEST BEGIN");
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1), "0001-01-01T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1),
-            "0001-01-01T00:00:00Z", "0001-01-01T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -1), "-0001-01-01T00:00:00");
-//    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -1), "-0001-01-01T00:00:00Z");
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -324),
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1, false), "0001-01-01T00:00:00" );
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1, true), "0001-01-01T00:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -1, false),
+            "-0001-01-01T00:00:00");
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -1, true),
+            "-0001-01-01T01:00:00+01:00", "-0001-01-01T00:00:00Z");
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, -324, false),
             "-0324-01-01T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1),
-            "0001-01-01T00:00:00-00:00", "0001-01-01T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1),
-            "0001-01-01T00:00:00+00:00", "0001-01-01T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 2, 1, 1)/*(0, 0, 12, 0, 2, 1, 1)*/,
-            "0001-01-02T00:00:00-12:00", "0001-01-02T00:00:00" );
-//            "0001-02-01T12:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 2, 1, 1)/*(0, 0, 12, 0, 1, 1, 1)*/,
-            "0001-01-02T00:00:00+12:00", "0001-01-02T00:00:00" );
-//            "0001-01-01T12:00:00" );
-    doTest( util::DateTime(990000000, 59, 59, 23, 31, 12, 9999),
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1, true),
+            "0001-01-01T00:00:00-00:00", "0001-01-01T00:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1, true),
+            "0001-01-01T00:00:00+00:00", "0001-01-01T00:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 12, 2, 1, 1, true),
+            "0001-01-02T00:00:00-12:00", "0001-01-02T12:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 12, 1, 1, 1, true),
+            "0001-01-02T00:00:00+12:00", "0001-01-01T12:00:00Z"  );
+    doTest( util::DateTime(990000000, 59, 59, 23, 31, 12, 9999, false),
             "9999-12-31T23:59:59.99",  "9999-12-31T23:59:59.990000000" );
-    doTest( util::DateTime(990000000, 59, 59, 23, 31, 12, 9999),
-            "9999-12-31T23:59:59.99Z", "9999-12-31T23:59:59.990000000" );
-    doTest( util::DateTime(999999999, 59, 59, 23, 31, 12, 9999),
+    doTest( util::DateTime(990000000, 59, 59, 23, 31, 12, 9999, true),
+            "9999-12-31T23:59:59.99Z", "9999-12-31T23:59:59.990000000Z" );
+    doTest( util::DateTime(999999999, 59, 59, 23, 31, 12, 9999, false),
             "9999-12-31T23:59:59.9999999999999999999999999999999999999",
             "9999-12-31T23:59:59.999999999" );
-    doTest( util::DateTime(999999999, 59, 59, 23, 31, 12, 9999),
+    doTest( util::DateTime(999999999, 59, 59, 23, 31, 12, 9999, true),
             "9999-12-31T23:59:59.9999999999999999999999999999999999999Z",
-            "9999-12-31T23:59:59.999999999" );
-    doTest( util::DateTime(0, 0, 0, 0, 29, 2, 2000), // leap year
-            "2000-02-29T00:00:00-00:00", "2000-02-29T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 0, 29, 2, 1600), // leap year
-            "1600-02-29T00:00:00-00:00", "1600-02-29T00:00:00" );
-    doTest( util::DateTime(0, 0, 0, 24, 1, 1, 333)
+            "9999-12-31T23:59:59.999999999Z" );
+    doTest( util::DateTime(0, 0, 0, 0, 29, 2, 2000, true), // leap year
+            "2000-02-29T00:00:00-00:00", "2000-02-29T00:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 0, 29, 2, 1600, true), // leap year
+            "1600-02-29T00:00:00-00:00", "1600-02-29T00:00:00Z" );
+    doTest( util::DateTime(0, 0, 0, 24, 1, 1, 333, false)
                 /*(0, 0, 0, 0, 2, 1, 333)*/,
             "0333-01-01T24:00:00"/*, "0333-01-02T00:00:00"*/ );
     // While W3C XMLSchema specifies a minimum of 4 year digits we are lenient
     // in what we accept.
-    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1),
+    doTest( util::DateTime(0, 0, 0, 0, 1, 1, 1, false),
             "1-01-01T00:00:00", "0001-01-01T00:00:00" );
     doTestDateTimeF( "+0001-01-01T00:00:00" ); // invalid: ^+
     doTestDateTimeF( "0001-1-01T00:00:00" ); // invalid: < 2 M
diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx
index 690c3e5..e99690e 100644
--- a/sax/source/tools/converter.cxx
+++ b/sax/source/tools/converter.cxx
@@ -28,6 +28,7 @@
 
 #include <rtl/ustrbuf.hxx>
 #include <rtl/math.hxx>
+#include <osl/time.h>
 
 #include <algorithm>
 
@@ -1185,13 +1186,48 @@ bool Converter::convertDuration(util::Duration& rDuration,
 }
 
 
+static void
+lcl_AppendTimezone(OUStringBuffer & i_rBuffer, sal_Int16 const nOffset)
+{
+    if (0 == nOffset)
+    {
+        i_rBuffer.append(sal_Unicode('Z'));
+    }
+    else
+    {
+        if (0 < nOffset)
+        {
+            i_rBuffer.append(sal_Unicode('+'));
+        }
+        else
+        {
+            i_rBuffer.append(sal_Unicode('-'));
+        }
+        const sal_Int32 nHours  (abs(nOffset) / 60);
+        const sal_Int32 nMinutes(abs(nOffset) % 60);
+        SAL_WARN_IF(nHours > 14 || (nHours == 14 && nMinutes > 0),
+                "sax", "convertDateTime: timezone overflow");
+        if (nHours < 10)
+        {
+            i_rBuffer.append('0');
+        }
+        i_rBuffer.append(nHours);
+        i_rBuffer.append(':');
+        if (nMinutes < 10)
+        {
+            i_rBuffer.append('0');
+        }
+        i_rBuffer.append(nMinutes);
+    }
+}
+
 /** convert util::Date to ISO "date" string */
 void Converter::convertDate(
         OUStringBuffer& i_rBuffer,
         const util::Date& i_rDate)
 {
-    const util::DateTime dt(
-            0, 0, 0, 0, i_rDate.Day, i_rDate.Month, i_rDate.Year);
+    const util::DateTime dt(0, 0, 0, 0,
+        i_rDate.Day, i_rDate.Month, i_rDate.Year, false);
     convertDateTime(i_rBuffer, dt, false);
 }
 
@@ -1260,6 +1296,17 @@ void Converter::convertDateTime(
             i_rBuffer.append(OUString::createFromAscii(ostr.str().c_str()));
         }
     }
+
+    sal_uInt16 * pTimezone(0); // FIXME pass this as parameter
+    if (pTimezone)
+    {
+        lcl_AppendTimezone(i_rBuffer, *pTimezone);
+    }
+    else if (i_rDateTime.IsUTC)
+    {
+        // append local time
+        lcl_AppendTimezone(i_rBuffer, 0);
+    }
 }
 
 /** convert ISO "date" or "dateTime" string to util::DateTime */
@@ -1279,6 +1326,10 @@ bool Converter::convertDateTime( util::DateTime& rDateTime,
             rDateTime.Minutes = 0;
             rDateTime.Seconds = 0;
             rDateTime.NanoSeconds = 0;
+            // FIXME
+#if 0
+            rDateTime.IsUTC = date.IsUTC;
+#endif
         }
         return true;
     }
@@ -1288,6 +1339,99 @@ bool Converter::convertDateTime( util::DateTime& rDateTime,
     }
 }
 
+static bool lcl_isLeapYear(const sal_uInt32 nYear)
+{
+    return ((nYear % 4) == 0)
+        && (((nYear % 100) != 0) || ((nYear % 400) == 0));
+}
+
+static sal_uInt16
+lcl_MaxDaysPerMonth(const sal_Int32 nMonth, const sal_Int32 nYear)
+{
+    static sal_uInt16 s_MaxDaysPerMonth[12] =
+        { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+    OSL_ASSERT(0 < nMonth && nMonth <= 12);
+    if ((2 == nMonth) && lcl_isLeapYear(nYear))
+    {
+        return 29;
+    }
+    return s_MaxDaysPerMonth[nMonth - 1];
+}
+
+static void lcl_ConvertToUTC(
+        sal_Int16 & o_rYear, sal_uInt16 & o_rMonth, sal_uInt16 & o_rDay,
+        sal_uInt16 & o_rHours, sal_uInt16 & o_rMinutes,
+        sal_Int16 const nSourceOffset)
+{
+    sal_Int16 nOffsetHours(abs(nSourceOffset) / 60);
+    sal_Int16 const nOffsetMinutes(abs(nSourceOffset) % 60);
+    o_rMinutes += nOffsetMinutes;
+    if (nSourceOffset < 0)
+    {
+        o_rMinutes += nOffsetMinutes;
+        if (60 <= o_rMinutes)
+        {
+            o_rMinutes -= 60;
+            ++nOffsetHours;
+        }
+        o_rHours += nOffsetHours;
+        if (o_rHours < 24)
+        {
+            return;
+        }
+        while (24 <= o_rHours)
+        {
+            o_rHours -= 24;
+            ++o_rDay;
+        }
+        sal_Int16 const nDaysInMonth(lcl_MaxDaysPerMonth(o_rMonth, o_rYear));
+        if (o_rDay <= nDaysInMonth)
+        {
+            return;
+        }
+        o_rDay -= nDaysInMonth;
+        ++o_rMonth;
+        if (o_rMonth <= 12)
+        {
+            return;
+        }
+        o_rMonth = 1;
+        ++o_rYear; // works for negative year too
+    }
+    else if (0 < nSourceOffset)
+    {
+        // argh everything is unsigned
+        if (o_rMinutes < nOffsetMinutes)
+        {
+            o_rMinutes += 60;
+            ++nOffsetHours;
+        }
+        o_rMinutes -= nOffsetMinutes;
+        sal_Int16 nDaySubtract(0);
+        while (o_rHours < nOffsetHours)
+        {
+            o_rHours += 24;
+            ++nDaySubtract;
+        }
+        o_rHours -= nOffsetHours;
+        if (nDaySubtract < o_rDay)
+        {
+            o_rDay -= nDaySubtract;
+            return;
+        }
+        sal_Int16 const nPrevMonth((o_rMonth == 1) ? 12 : o_rMonth - 1);
+        sal_Int16 const nDaysInMonth(lcl_MaxDaysPerMonth(nPrevMonth, o_rYear));
+        o_rDay += nDaysInMonth;
+        --o_rMonth;
+        if (0 == o_rMonth)
+        {
+            o_rMonth = 12;
+            --o_rYear; // works for negative year too
+        }
+        o_rDay -= nDaySubtract;
+    }
+}
+
 static bool
 readDateTimeComponent(const OUString & rString,
     sal_Int32 & io_rnPos, sal_Int32 & o_rnTarget,
@@ -1309,24 +1453,7 @@ readDateTimeComponent(const OUString & rString,
     return true;
 }
 
-static bool lcl_isLeapYear(const sal_uInt32 nYear)
-{
-    return ((nYear % 4) == 0)
-        && (((nYear % 100) != 0) || ((nYear % 400) == 0));
-}
 
-static sal_uInt16
-lcl_MaxDaysPerMonth(const sal_Int32 nMonth, const sal_Int32 nYear)
-{
-    static sal_uInt16 s_MaxDaysPerMonth[12] =
-        { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-    OSL_ASSERT(0 < nMonth && nMonth <= 12);
-    if ((2 == nMonth) && lcl_isLeapYear(nYear))
-    {
-        return 29;
-    }
-    return s_MaxDaysPerMonth[nMonth - 1];
-}
 
 /** convert ISO "date" or "dateTime" string to util::DateTime or util::Date */
 bool Converter::convertDateOrDateTime(
@@ -1526,13 +1653,11 @@ bool Converter::convertDateOrDateTime(
 
     bSuccess &= (nPos == string.getLength()); // trailing junk?
 
-    if (bSuccess && bHaveTimezone)
-    {
-        // util::DateTime does not support timezones!
-    }
-
     if (bSuccess)
     {
+        sal_uInt16 * pTimezone(0); // FIXME pass this as parameter
+        sal_Int16 const nTimezoneOffset = ((bHaveTimezoneMinus) ? (-1) : (+1))
+                        * ((nTimezoneHours * 60) + nTimezoneMinutes);
         if (bHaveTime) // time is optional
         {
             rDateTime.Year =
@@ -1543,6 +1668,25 @@ bool Converter::convertDateOrDateTime(
             rDateTime.Minutes = static_cast<sal_uInt16>(nMinutes);
             rDateTime.Seconds = static_cast<sal_uInt16>(nSeconds);
             rDateTime.NanoSeconds = static_cast<sal_uInt32>(nNanoSeconds);
+            if (bHaveTimezone)
+            {
+                if (pTimezone)
+                {
+                    *pTimezone = nTimezoneOffset;
+                    rDateTime.IsUTC = (0 == nTimezoneOffset);
+                }
+                else
+                {
+                    lcl_ConvertToUTC(rDateTime.Year, rDateTime.Month,
+                            rDateTime.Day, rDateTime.Hours, rDateTime.Minutes,
+                            nTimezoneOffset);
+                    rDateTime.IsUTC = true;
+                }
+            }
+            else
+            {
+                rDateTime.IsUTC = false;
+            }
             rbDateTime = true;
         }
         else
@@ -1551,6 +1695,18 @@ bool Converter::convertDateOrDateTime(
                 ((isNegative) ? (-1) : (+1)) * static_cast<sal_Int16>(nYear);
             rDate.Month = static_cast<sal_uInt16>(nMonth);
             rDate.Day = static_cast<sal_uInt16>(nDay);
+            if (bHaveTimezone)
+            {
+                if (pTimezone)
+                {
+                    *pTimezone = nTimezoneOffset;
+                }
+                else
+                {
+                    // a Date cannot be adjusted
+                    SAL_INFO("sax", "dropping timezone");
+                }
+            }
             rbDateTime = false;
         }
     }
diff --git a/sc/source/filter/oox/unitconverter.cxx b/sc/source/filter/oox/unitconverter.cxx
index 20d9c48..0db4541 100644
--- a/sc/source/filter/oox/unitconverter.cxx
+++ b/sc/source/filter/oox/unitconverter.cxx
@@ -190,7 +190,7 @@ double UnitConverter::calcSerialFromDateTime( const DateTime& rDateTime ) const
 
 DateTime UnitConverter::calcDateTimeFromSerial( double fSerial ) const
 {
-    DateTime aDateTime( 0, 0, 0, 0, 1, 1, 0 );
+    DateTime aDateTime( 0, 0, 0, 0, 1, 1, 0, false );
     double fDays = 0.0;
     double fTime = modf( fSerial, &fDays );
 
diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx
index 20233f2..184cc3d 100644
--- a/sd/source/ui/annotations/annotationmanager.cxx
+++ b/sd/source/ui/annotations/annotationmanager.cxx
@@ -143,7 +143,10 @@ static SfxDispatcher* getDispatcher( ViewShellBase& rBase )
 com::sun::star::util::DateTime getCurrentDateTime()
 {
     DateTime aCurrentDate( DateTime::SYSTEM );
-    return com::sun::star::util::DateTime( 0, aCurrentDate.GetSec(), aCurrentDate.GetMin(), aCurrentDate.GetHour(), aCurrentDate.GetDay(), aCurrentDate.GetMonth(), aCurrentDate.GetYear() );
+    return com::sun::star::util::DateTime( 0, aCurrentDate.GetSec(),
+            aCurrentDate.GetMin(), aCurrentDate.GetHour(),
+            aCurrentDate.GetDay(), aCurrentDate.GetMonth(),
+            aCurrentDate.GetYear(), false );
 }
 
 OUString getAnnotationDateTimeString( const Reference< XAnnotation >& xAnnotation )
diff --git a/sfx2/source/appl/sfxpicklist.cxx b/sfx2/source/appl/sfxpicklist.cxx
index f18b1db..a32cfee 100644
--- a/sfx2/source/appl/sfxpicklist.cxx
+++ b/sfx2/source/appl/sfxpicklist.cxx
@@ -367,7 +367,7 @@ void SfxPickList::Notify( SfxBroadcaster&, const SfxHint& rHint )
                     xDocProps->setCreationDate( util::DateTime(
                         now.GetNanoSec(), now.GetSec(), now.GetMin(),
                         now.GetHour(), now.GetDay(), now.GetMonth(),
-                        now.GetYear() ) );
+                        now.GetYear(), false) );
                 }
 
                 if ( bAllowModif )
diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx
index f5f619d..fd4b537 100644
--- a/sfx2/source/dialog/dinfdlg.cxx
+++ b/sfx2/source/dialog/dinfdlg.cxx
@@ -99,7 +99,8 @@ bool operator==(const util::DateTime &i_rLeft, const util::DateTime &i_rRight)
         && i_rLeft.Hours            == i_rRight.Hours
         && i_rLeft.Minutes          == i_rRight.Minutes
         && i_rLeft.Seconds          == i_rRight.Seconds
-        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds;
+        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds
+        && i_rLeft.IsUTC            == i_rRight.IsUTC;
 }
 
 // STATIC DATA -----------------------------------------------------------
@@ -353,7 +354,7 @@ void SfxDocumentInfoItem::resetUserData(const OUString & i_rAuthor)
     DateTime now( DateTime::SYSTEM );
     setCreationDate( util::DateTime(
         now.GetNanoSec(), now.GetSec(), now.GetMin(), now.GetHour(),
-        now.GetDay(), now.GetMonth(), now.GetYear() ) );
+        now.GetDay(), now.GetMonth(), now.GetYear(), false) );
     setModifiedBy(OUString());
     setPrintedBy(OUString());
     setModificationDate(util::DateTime());
@@ -799,7 +800,7 @@ IMPL_LINK_NOARG(SfxDocumentPage, DeleteHdl)
     DateTime now( DateTime::SYSTEM );
     util::DateTime uDT(
         now.GetNanoSec(), now.GetSec(), now.GetMin(), now.GetHour(),
-        now.GetDay(), now.GetMonth(), now.GetYear() );
+        now.GetDay(), now.GetMonth(), now.GetYear(), false);
     m_pCreateValFt->SetText( ConvertDateTime_Impl( aName, uDT, rLocaleWrapper ) );
     OUString aEmpty;
     m_pChangeValFt->SetText( aEmpty );
@@ -1866,8 +1867,10 @@ Sequence< beans::PropertyValue > CustomPropertiesWindow::GetCustomProperties() c
             {
                 Date aTmpDate = pLine->m_aDateField.GetDate();
                 Time aTmpTime = pLine->m_aTimeField.GetTime();
-                util::DateTime aDateTime(aTmpTime.GetNanoSec(), aTmpTime.GetSec(), aTmpTime.GetMin(), aTmpTime.GetHour(),
-                        aTmpDate.GetDay(), aTmpDate.GetMonth(), aTmpDate.GetYear() );
+                util::DateTime const aDateTime(aTmpTime.GetNanoSec(),
+                    aTmpTime.GetSec(), aTmpTime.GetMin(), aTmpTime.GetHour(),
+                    aTmpDate.GetDay(), aTmpDate.GetMonth(), aTmpDate.GetYear(),
+                    false);
                 aPropertiesSeq[i].Value <<= aDateTime;
             }
             else if ( CUSTOM_TYPE_DURATION == nType )
@@ -1877,7 +1880,8 @@ Sequence< beans::PropertyValue > CustomPropertiesWindow::GetCustomProperties() c
             else if ( CUSTOM_TYPE_DATE == nType )
             {
                 Date aTmpDate = pLine->m_aDateField.GetDate();
-                util::Date aDate(aTmpDate.GetDay(), aTmpDate.GetMonth(), aTmpDate.GetYear());
+                util::Date const aDate(aTmpDate.GetDay(), aTmpDate.GetMonth(),
+                        aTmpDate.GetYear());
                 aPropertiesSeq[i].Value <<= aDate;
 
             }
diff --git a/sfx2/source/doc/SfxDocumentMetaData.cxx b/sfx2/source/doc/SfxDocumentMetaData.cxx
index d83b195..5376c64 100644
--- a/sfx2/source/doc/SfxDocumentMetaData.cxx
+++ b/sfx2/source/doc/SfxDocumentMetaData.cxx
@@ -412,7 +412,8 @@ bool operator== (const css::util::DateTime &i_rLeft,
         && i_rLeft.Hours            == i_rRight.Hours
         && i_rLeft.Minutes          == i_rRight.Minutes
         && i_rLeft.Seconds          == i_rRight.Seconds
-        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds;
+        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds
+        && i_rLeft.IsUTC            == i_rRight.IsUTC;
 }
 
 // NB: keep these two arrays in sync!
@@ -1838,7 +1839,7 @@ SfxDocumentMetaData::resetUserData(const OUString & the_value)
     bModified |= setMetaText("meta:initial-creator", the_value);
     ::DateTime now( ::DateTime::SYSTEM );
     css::util::DateTime uDT(now.GetNanoSec(), now.GetSec(), now.GetMin(),
-        now.GetHour(), now.GetDay(), now.GetMonth(), now.GetYear());
+        now.GetHour(), now.GetDay(), now.GetMonth(), now.GetYear(), false);
     bModified |= setMetaText("meta:creation-date", dateTimeToText(uDT));
     bModified |= setMetaText("dc:creator", OUString());
     bModified |= setMetaText("meta:printed-by", OUString());
diff --git a/sfx2/source/doc/objcont.cxx b/sfx2/source/doc/objcont.cxx
index 41f2046..eb8a0a2 100644
--- a/sfx2/source/doc/objcont.cxx
+++ b/sfx2/source/doc/objcont.cxx
@@ -205,7 +205,7 @@ void SfxObjectShell::UpdateDocInfoForSave()
             xDocProps->setModificationDate( util::DateTime(
                 now.GetNanoSec(), now.GetSec(), now.GetMin(),
                 now.GetHour(), now.GetDay(), now.GetMonth(),
-                now.GetYear() ) );
+                now.GetYear(), false) );
             xDocProps->setModifiedBy( aUserName );
             if ( !HasName() || pImp->bIsSaving )
                 // QUESTION: not in case of "real" SaveAs as this is meant to create a new document
@@ -836,7 +836,7 @@ void SfxObjectShell::ResetFromTemplate( const String& rTemplateName, const Strin
                 xDocProps->setTemplateDate( util::DateTime(
                     now.GetNanoSec(), now.GetSec(), now.GetMin(),
                     now.GetHour(), now.GetDay(), now.GetMonth(),
-                    now.GetYear() ) );
+                    now.GetYear(), false) );
 
                 SetQueryLoadTemplate( sal_True );
             }
diff --git a/sfx2/source/doc/oleprops.cxx b/sfx2/source/doc/oleprops.cxx
index 6ecc27a..56c4b83 100644
--- a/sfx2/source/doc/oleprops.cxx
+++ b/sfx2/source/doc/oleprops.cxx
@@ -40,8 +40,10 @@ using ::com::sun::star::uno::makeAny;
 using namespace ::com::sun::star;
 
 #define TIMESTAMP_INVALID_DATETIME      ( DateTime ( Date ( 1, 1, 1601 ), Time ( 0, 0, 0 ) ) )  /// Invalid value for date and time to create invalid instance of TimeStamp.
-#define TIMESTAMP_INVALID_UTILDATETIME  ( util::DateTime ( 0, 0, 0, 0, 1, 1, 1601 ) )   /// Invalid value for date and time to create invalid instance of TimeStamp.
-#define TIMESTAMP_INVALID_UTILDATE  ( util::Date ( 1, 1, 1601 ) )   /// Invalid value for date to create invalid instance of TimeStamp.
+/// Invalid value for date and time to create invalid instance of TimeStamp.
+#define TIMESTAMP_INVALID_UTILDATETIME  (util::DateTime(0, 0, 0, 0, 1, 1, 1601, false))
+/// Invalid value for date to create invalid instance of TimeStamp.
+#define TIMESTAMP_INVALID_UTILDATE  (util::Date(1, 1, 1601))
 
 static
 bool operator==(const util::DateTime &i_rLeft, const util::DateTime &i_rRight)
@@ -52,7 +54,8 @@ bool operator==(const util::DateTime &i_rLeft, const util::DateTime &i_rRight)
         && i_rLeft.Hours            == i_rRight.Hours
         && i_rLeft.Minutes          == i_rRight.Minutes
         && i_rLeft.Seconds          == i_rRight.Seconds
-        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds;
+        && i_rLeft.NanoSeconds      == i_rRight.NanoSeconds
+        && i_rLeft.IsUTC            == i_rRight.IsUTC;
 }
 
 static
@@ -587,6 +590,7 @@ void SfxOleFileTimeProperty::ImplLoad( SvStream& rStrm )
     maDateTime.Minutes = aDateTime.GetMin();
     maDateTime.Seconds = aDateTime.GetSec();
     maDateTime.NanoSeconds = aDateTime.GetNanoSec();
+    maDateTime.IsUTC   = false;
 }
 
 void SfxOleFileTimeProperty::ImplSave( SvStream& rStrm )
@@ -895,7 +899,8 @@ void SfxOleSection::SetDateValue( sal_Int32 nPropId, const util::Date& rValue )
         SetProperty( SfxOlePropertyRef( new SfxOleFileTimeProperty( nPropId, TIMESTAMP_INVALID_UTILDATETIME ) ) );
     else
     {
-        const util::DateTime aValue(0, 0, 0, 0, rValue.Day, rValue.Month, rValue.Year );
+        const util::DateTime aValue(0, 0, 0, 0, rValue.Day, rValue.Month,
+                rValue.Year, false );
         SetProperty( SfxOlePropertyRef( new SfxOleFileTimeProperty( nPropId, aValue ) ) );
     }
 }
diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index 0a9c080..251dbb0 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -318,7 +318,7 @@ void SfxPrinterController::jobStarted()
 
         xDocProps->setPrintDate( util::DateTime(
             now.GetNanoSec(), now.GetSec(), now.GetMin(), now.GetHour(),
-            now.GetDay(), now.GetMonth(), now.GetYear() ) );
+            now.GetDay(), now.GetMonth(), now.GetYear(), false) );
 
         SFX_APP()->NotifyEvent( SfxEventHint(SFX_EVENT_PRINTDOC, GlobalEventConfig::GetEventName( STR_EVENT_PRINTDOC ), mpObjectShell ) );
         // FIXME: how to get all print options incl. AdditionalOptions easily?
diff --git a/svl/source/items/dateitem.cxx b/svl/source/items/dateitem.cxx
index 67ebba6..be60173 100644
--- a/svl/source/items/dateitem.cxx
+++ b/svl/source/items/dateitem.cxx
@@ -29,6 +29,7 @@
 #include <com/sun/star/util/DateTime.hpp>
 #include <com/sun/star/lang/Locale.hpp>
 
+
 // STATIC DATA -----------------------------------------------------------
 
 DBG_NAME(SfxDateTimeItem)
@@ -182,7 +183,8 @@ bool SfxDateTimeItem::QueryValue( com::sun::star::uno::Any& rVal,
                                            aDateTime.GetHour(),
                                            aDateTime.GetDay(),
                                            aDateTime.GetMonth(),
-                                           aDateTime.GetYear() );
+                                           aDateTime.GetYear(),
+                                           false);
     rVal <<= aValue;
     return true;
 }
diff --git a/svtools/source/misc/templatefoldercache.cxx b/svtools/source/misc/templatefoldercache.cxx
index c023720..9866c95 100644
--- a/svtools/source/misc/templatefoldercache.cxx
+++ b/svtools/source/misc/templatefoldercache.cxx
@@ -97,7 +97,8 @@ namespace svt
             &&  _rLHS.Hours     == _rRHS.Hours
             &&  _rLHS.Day       == _rRHS.Day
             &&  _rLHS.Month     == _rRHS.Month
-            &&  _rLHS.Year      == _rRHS.Year;
+            &&  _rLHS.Year      == _rRHS.Year
+            &&  _rLHS.IsUTC     == _rRHS.IsUTC;
     }
 
     //---------------------------------------------------------------------
diff --git a/svtools/source/svhtml/parhtml.cxx b/svtools/source/svhtml/parhtml.cxx
index a95ec79..90809ec 100644
--- a/svtools/source/svhtml/parhtml.cxx
+++ b/svtools/source/svhtml/parhtml.cxx
@@ -2187,7 +2187,8 @@ bool HTMLParser::ParseMetaOptionsImpl(
                 ::util::DateTime uDT(aDateTime.GetNanoSec(),
                     aDateTime.GetSec(), aDateTime.GetMin(),
                     aDateTime.GetHour(), aDateTime.GetDay(),
-                    aDateTime.GetMonth(), aDateTime.GetYear());
+                    aDateTime.GetMonth(), aDateTime.GetYear(),
+                    false);
                 if ( HTML_META_CREATED==nAction )
                     i_xDocProps->setCreationDate( uDT );
                 else
diff --git a/sw/source/core/doc/docglbl.cxx b/sw/source/core/doc/docglbl.cxx
index 58dd033..f9e0250 100644
--- a/sw/source/core/doc/docglbl.cxx
+++ b/sw/source/core/doc/docglbl.cxx
@@ -275,7 +275,8 @@ bool SwDoc::SplitDoc( sal_uInt16 eDocType, const String& rPath, bool bOutline, c
                     ::util::DateTime uDT(aTmplDate.GetNanoSec(),
                         aTmplDate.GetSec(), aTmplDate.GetMin(),
                         aTmplDate.GetHour(), aTmplDate.GetDay(),
-                        aTmplDate.GetMonth(), aTmplDate.GetYear());
+                        aTmplDate.GetMonth(), aTmplDate.GetYear(),
+                        false );
                     xDocProps->setTemplateDate(uDT);
                     xDocProps->setTemplateURL(rPath);
                     // Set the new doc's title to the text of the "split para".
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 907454f..26c7889 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1488,7 +1488,7 @@ void SwWW8ImplReader::ImportDop()
        ::util::DateTime uDT(aLastPrinted.GetNanoSec(),
             aLastPrinted.GetSec(), aLastPrinted.GetMin(),
             aLastPrinted.GetHour(), aLastPrinted.GetDay(),
-            aLastPrinted.GetMonth(), aLastPrinted.GetYear());
+            aLastPrinted.GetMonth(), aLastPrinted.GetYear(), false);
         xDocuProps->setPrintDate(uDT);
     }
 
diff --git a/toolkit/source/controls/unocontrols.cxx b/toolkit/source/controls/unocontrols.cxx
index abff7d2..d61b741 100644
--- a/toolkit/source/controls/unocontrols.cxx
+++ b/toolkit/source/controls/unocontrols.cxx
@@ -3310,7 +3310,7 @@ void UnoDateFieldControl::textChanged( const awt::TextEvent& e ) throw(uno::Runt
             if ( xText.is() && xText->getText().getLength() )
                 // and in real, the text of the peer is *not* empty
                 // -> simulate an invalid date, which is different from "no date"
-                aValue <<= util::Date( 0, 0, 0 );
+                aValue <<= util::Date();
         }
     }
     else
diff --git a/ucb/source/ucp/ftp/ftpdirp.hxx b/ucb/source/ucp/ftp/ftpdirp.hxx
index f8e04b9..54249ee 100644
--- a/ucb/source/ucp/ftp/ftpdirp.hxx
+++ b/ucb/source/ucp/ftp/ftpdirp.hxx
@@ -54,7 +54,8 @@ namespace ftp {
                                                       hours,
                                                       day,
                                                       month,
-                                                      year) { }
+                                                      year,
+                                                      false) { }
 
         void SetYear(sal_uInt16 year) { Year = year; }
         void SetMonth(sal_uInt16 month) { Month = month; }
diff --git a/ucb/source/ucp/gio/gio_content.cxx b/ucb/source/ucp/gio/gio_content.cxx
index 06e3920..34857d2 100644
--- a/ucb/source/ucp/gio/gio_content.cxx
+++ b/ucb/source/ucp/gio/gio_content.cxx
@@ -381,7 +381,7 @@ static util::DateTime getDateFromUnix (time_t t)
 
     if ( osl_getDateTimeFromTimeValue( &tv, &dt ) )
         return util::DateTime( 0, dt.Seconds, dt.Minutes, dt.Hours,
-                               dt.Day, dt.Month, dt.Year);
+                   dt.Day, dt.Month, dt.Year, false);
     else
         return util::DateTime();
 }
diff --git a/unotools/source/misc/datetime.cxx b/unotools/source/misc/datetime.cxx
index b383dc5..5710350 100644
--- a/unotools/source/misc/datetime.cxx
+++ b/unotools/source/misc/datetime.cxx
@@ -25,6 +25,7 @@
 #include <rtl/ustrbuf.hxx>
 #include <rtl/math.hxx>
 
+
 namespace
 {
     sal_Int32 impl_pow(sal_Int32 x, sal_Int32 y)
@@ -328,7 +329,7 @@ bool ISO8601parseDateTime(const OUString &rString, starutil::DateTime& rDateTime
     if (bSuccess)
     {
         rDateTime = starutil::DateTime(aTime.NanoSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours,
-                                       aDate.Day, aDate.Month, aDate.Year);
+               aDate.Day, aDate.Month, aDate.Year, false);
     }
 
     return bSuccess;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index fe15892..e6d51a5 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -188,7 +188,7 @@ static const char* lcl_RtfToString(RTFKeyword nKeyword)
 static util::DateTime lcl_getDateTime(RTFParserState& aState)
 {
     return util::DateTime(0 /*100sec*/, 0 /*sec*/, aState.nMinute, aState.nHour,
-            aState.nDay, aState.nMonth, aState.nYear);
+        aState.nDay, aState.nMonth, aState.nYear, false);
 }
 
 static void lcl_DestinationToMath(OUStringBuffer& rDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer, bool& rMathNor)
diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx
index 1200702..89a8dae 100644
--- a/xmloff/source/chart/SchXMLExport.cxx
+++ b/xmloff/source/chart/SchXMLExport.cxx
@@ -1167,7 +1167,7 @@ void SchXMLExportHelper_Impl::parseDocument( Reference< chart::XChartDocument >&
     sal_Bool bHasMainTitle = sal_False;
     sal_Bool bHasSubTitle = sal_False;
     sal_Bool bHasLegend = sal_False;
-    util::DateTime aNullDate(0,0,0,0,30,12,1899);
+    util::DateTime aNullDate(0,0,0,0,30,12,1899, false);
 
     std::vector< XMLPropertyState > aPropertyStates;
 


More information about the Libreoffice-commits mailing list