summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx55
1 files changed, 10 insertions, 45 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 0d2e31102e00..82d2b75bc720 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -74,7 +74,6 @@
#include <rtl/string.h>
#include "FieldTypes.hxx"
-#include <tools/datetime.hxx>
#include <tools/string.hxx>
#ifdef DEBUG_DOMAINMAPPER
#include <resourcemodel/QNameToString.hxx>
@@ -974,60 +973,26 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
util::DateTime lcl_DateStringToDateTime( const ::rtl::OUString& rDateTime )
{
- DateTime aDateTime;
+ util::DateTime aDateTime;
//xsd::DateTime in the format [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] example: 2008-01-21T10:42:00Z
//OUString getToken( sal_Int32 token, sal_Unicode cTok, sal_Int32& index ) const SAL_THROW(())
sal_Int32 nIndex = 0;
::rtl::OUString sDate = rDateTime.getToken( 0, 'T', nIndex );
+ // HACK: this is broken according to the spec, but MSOffice always treats the time as local,
+ // and writes it as Z (=UTC+0)
::rtl::OUString sTime = rDateTime.getToken( 0, 'Z', nIndex );
- int timezonepos = nIndex;
nIndex = 0;
- aDateTime.SetYear( sDate.getToken( 0, '-', nIndex ).toInt32() );
- aDateTime.SetMonth( sDate.getToken( 0, '-', nIndex ).toInt32() );
- aDateTime.SetDay( sDate.copy( nIndex ).toInt32() );
+ aDateTime.Year = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
+ aDateTime.Month = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
+ aDateTime.Day = sal_uInt16( sDate.copy( nIndex ).toInt32() );
nIndex = 0;
- aDateTime.SetHour( sTime.getToken( 0, ':', nIndex ).toInt32() );
- aDateTime.SetMin( sTime.getToken( 0, ':', nIndex ).toInt32() );
- aDateTime.SetSec( sTime.copy( nIndex ).toInt32() );
+ aDateTime.Hours = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
+ aDateTime.Minutes = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
+ aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() );
- if( timezonepos >= 0 ) // otherwise consider it local time
- {
- bool negative = false;
- nIndex = timezonepos;
- if( nIndex < rDateTime.getLength() && rDateTime[ nIndex ] == '-' )
- {
- negative = true;
- ++nIndex;
- }
- else if ( nIndex < rDateTime.getLength() && rDateTime[ nIndex ] == '+' )
- {
- ++nIndex;
- }
- Time diff( 0, 0, 0 );
- if( nIndex < rDateTime.getLength())
- {
- diff.SetHour( rDateTime.getToken( 0, ':', nIndex ).toInt32());
- diff.SetMin( rDateTime.getToken( 0, ':', nIndex ).toInt32());
- }
- // convert to utc, then to local
- if( negative )
- aDateTime -= diff;
- else
- aDateTime += diff;
- aDateTime.ConvertToLocalTime();
- }
- util::DateTime ret;
- ret.Year = aDateTime.GetYear();
- ret.Month = aDateTime.GetMonth();
- ret.Day = aDateTime.GetDay();
- ret.Hours = aDateTime.GetHour();
- ret.Minutes = aDateTime.GetMin();
- ret.Seconds = aDateTime.GetSec();
- ret.HundredthSeconds = 0;
- return ret;
+ return aDateTime;
}
-
void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap )
{
if (m_aTextAppendStack.empty())