diff options
author | Adam Co <rattles2013@gmail.com> | 2014-02-03 16:53:17 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-02-11 13:32:34 +0000 |
commit | 94429caa64a1dca701f0b120f669bdd561b6ced9 (patch) | |
tree | f36201cba03234b730d88b3081244a03146d2717 /writerfilter | |
parent | 25e6760c34f6df45fb60a756af503d6525c46f61 (diff) |
Refactor the code for converting 'Date' string to 'DateTime'
Change-Id: I20632258709856cd4c6680e1c8a1d92271ad0453
Reviewed-on: https://gerrit.libreoffice.org/7817
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/ConversionHelper.cxx | 26 | ||||
-rw-r--r-- | writerfilter/source/dmapper/ConversionHelper.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 31 |
3 files changed, 28 insertions, 30 deletions
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx index 102e5c89f8c7..c39859dee0a5 100644 --- a/writerfilter/source/dmapper/ConversionHelper.cxx +++ b/writerfilter/source/dmapper/ConversionHelper.cxx @@ -254,7 +254,6 @@ sal_Int32 ConvertColor(sal_Int32 nWordColor) return nRet; } - sal_Int16 convertTableJustification( sal_Int32 nIntValue ) { sal_Int16 nOrient = text::HoriOrientation::LEFT_AND_WIDTH; @@ -412,6 +411,31 @@ sal_Int16 ConvertNumberingType(sal_Int32 nFmt) return nRet; } +com::sun::star::util::DateTime ConvertDateStringToDateTime( const OUString& rDateTime ) +{ + com::sun::star::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; + 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) + OUString sTime = rDateTime.getToken( 0, 'Z', nIndex ); + nIndex = 0; + aDateTime.Year = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() ); + aDateTime.Month = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() ); + if (nIndex != -1) + aDateTime.Day = sal_uInt16( sDate.copy( nIndex ).toInt32() ); + + nIndex = 0; + aDateTime.Hours = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() ); + aDateTime.Minutes = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() ); + if (nIndex != -1) + aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() ); + + return aDateTime; +} + } // namespace ConversionHelper } //namespace dmapper diff --git a/writerfilter/source/dmapper/ConversionHelper.hxx b/writerfilter/source/dmapper/ConversionHelper.hxx index 352d29fbeee8..ff2fa7fecb1b 100644 --- a/writerfilter/source/dmapper/ConversionHelper.hxx +++ b/writerfilter/source/dmapper/ConversionHelper.hxx @@ -50,6 +50,7 @@ namespace ConversionHelper{ sal_Int16 convertTableJustification( sal_Int32 nIntValue ); sal_Int16 ConvertNumberingType(sal_Int32 nFmt); + com::sun::star::util::DateTime ConvertDateStringToDateTime( const OUString& rDateTime ); } // namespace ConversionHelper } //namespace dmapper } // namespace writerfilter diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 12855fe11d75..26a7384f7db8 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1104,32 +1104,6 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap ) #endif } - -util::DateTime lcl_DateStringToDateTime( const OUString& rDateTime ) -{ - 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; - 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) - OUString sTime = rDateTime.getToken( 0, 'Z', nIndex ); - nIndex = 0; - aDateTime.Year = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() ); - aDateTime.Month = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() ); - if (nIndex != -1) - aDateTime.Day = sal_uInt16( sDate.copy( nIndex ).toInt32() ); - - nIndex = 0; - aDateTime.Hours = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() ); - aDateTime.Minutes = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() ); - if (nIndex != -1) - aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() ); - - return aDateTime; -} - void DomainMapper_Impl::appendTextPortion( const OUString& rString, PropertyMapPtr pPropertyMap ) { if (m_bDiscardHeaderFooter) @@ -1549,10 +1523,9 @@ void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange pRedlineProperties[0].Name = rPropNameSupplier.GetName( PROP_REDLINE_AUTHOR ); pRedlineProperties[0].Value <<= pRedline->m_sAuthor; pRedlineProperties[1].Name = rPropNameSupplier.GetName( PROP_REDLINE_DATE_TIME ); - pRedlineProperties[1].Value <<= lcl_DateStringToDateTime( pRedline->m_sDate ); + pRedlineProperties[1].Value <<= ConversionHelper::ConvertDateStringToDateTime( pRedline->m_sDate ); pRedlineProperties[2].Name = rPropNameSupplier.GetName( PROP_REDLINE_REVERT_PROPERTIES ); pRedlineProperties[2].Value <<= pRedline->m_aRevertProperties; - xRedline->makeRedline( sType, aRedlineProperties ); } catch( const uno::Exception & ) @@ -3959,7 +3932,7 @@ void DomainMapper_Impl::SetCurrentRedlineDate( OUString sDate ) pCurrent->m_sDate = sDate; } else - m_xAnnotationField->setPropertyValue("DateTimeValue", uno::makeAny(lcl_DateStringToDateTime(sDate))); + m_xAnnotationField->setPropertyValue("DateTimeValue", uno::makeAny(ConversionHelper::ConvertDateStringToDateTime(sDate))); } void DomainMapper_Impl::SetCurrentRedlineId( sal_Int32 sId ) |