diff options
author | Eike Rathke <er@openoffice.org> | 2001-10-19 11:55:37 +0000 |
---|---|---|
committer | Eike Rathke <er@openoffice.org> | 2001-10-19 11:55:37 +0000 |
commit | 26c096a024714f6b8817fcb2f2433cb0fcbd139a (patch) | |
tree | d0dc04950150d3df62822c6593333b7420a03f1f | |
parent | bb473cf69a7dbf61ec9dc3fe0d214dd0fc2fa1fe (diff) |
#90890# FallBackToGregorianCalendar if EraID of other calendar is undefined 'Dummy'
-rw-r--r-- | svtools/source/numbers/zformat.cxx | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/svtools/source/numbers/zformat.cxx b/svtools/source/numbers/zformat.cxx index 0049ab1b9db0..eca4970a0ec8 100644 --- a/svtools/source/numbers/zformat.cxx +++ b/svtools/source/numbers/zformat.cxx @@ -2,9 +2,9 @@ * * $RCSfile: zformat.cxx,v $ * - * $Revision: 1.32 $ + * $Revision: 1.33 $ * - * last change: $Author: er $ $Date: 2001-10-16 11:16:13 $ + * last change: $Author: er $ $Date: 2001-10-19 12:55:37 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -2428,6 +2428,32 @@ void SvNumberformat::SwitchToGregorianCalendar( const String& rOrgCalendar, doub } +BOOL SvNumberformat::FallBackToGregorianCalendar( String& rOrgCalendar, double& fOrgDateTime ) +{ + using namespace ::com::sun::star::i18n; + CalendarWrapper& rCal = GetCal(); + if ( rCal.getUniqueID() != sGregorian ) + { + sal_Int16 nVal = rCal.getValue( CalendarFieldIndex::ERA ); + if ( nVal == 0 && rCal.getLoadedCalendar().Eras[0].ID.equalsAsciiL( + RTL_CONSTASCII_STRINGPARAM( "Dummy" ) ) ) + { + if ( !rOrgCalendar.Len() ) + { + rOrgCalendar = rCal.getUniqueID(); + fOrgDateTime = rCal.getDateTime(); + } + else if ( rOrgCalendar == String(sGregorian) ) + rOrgCalendar.Erase(); + rCal.loadCalendar( sGregorian, rLoc().getLocale() ); + rCal.setDateTime( fOrgDateTime ); + return TRUE; + } + } + return FALSE; +} + + void lcl_SvNumberformat_AppendEraG( String& OutString, const CalendarWrapper& rCal ) { using namespace ::com::sun::star::i18n; @@ -2466,6 +2492,8 @@ BOOL SvNumberformat::ImpGetDateOutput(double fNumber, BOOL bOtherCalendar = IsOtherCalendar( NumFor[nIx] ); if ( bOtherCalendar ) SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime ); + if ( FallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime ) ) + bOtherCalendar = FALSE; const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info(); const USHORT nAnz = NumFor[nIx].GetnAnz(); for (USHORT i = 0; i < nAnz; i++) @@ -2480,6 +2508,7 @@ BOOL SvNumberformat::ImpGetDateOutput(double fNumber, } rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLocale() ); rCal.setDateTime( fOrgDateTime ); + FallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime ); break; case SYMBOLTYPE_STAR: if( bStarFlag ) @@ -2699,6 +2728,8 @@ BOOL SvNumberformat::ImpGetDateTimeOutput(double fNumber, BOOL bOtherCalendar = IsOtherCalendar( NumFor[nIx] ); if ( bOtherCalendar ) SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime ); + if ( FallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime ) ) + bOtherCalendar = FALSE; const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info(); BOOL bInputLine; @@ -2787,6 +2818,7 @@ BOOL SvNumberformat::ImpGetDateTimeOutput(double fNumber, } rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLocale() ); rCal.setDateTime( fOrgDateTime ); + FallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime ); break; case SYMBOLTYPE_STAR: if( bStarFlag ) |