diff options
author | Eike Rathke <erack@redhat.com> | 2021-06-23 19:41:46 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2021-06-23 21:26:23 +0200 |
commit | 4b6c1190f0cde3bc74925bcfa644f24101c6c98f (patch) | |
tree | 6691ec4d25d74a0fa22edaabe36cd5b06a09e7b2 /sc | |
parent | ff3f749cd08851ee4eb0991eabee0327ca081a45 (diff) |
Resolves: tdf#143008 Evaluate AM/PM for type date+time text-to-column and CSV
Change-Id: Ib760b9a103ab4b8ce7f5a158b09fbe11c6617f2a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117747
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit d81775f5b12080676ebaf659c5a4c10d64a9074b)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117719
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/docshell/impex.cxx | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx index b1a553a2ac10..380bd875fadc 100644 --- a/sc/source/ui/docshell/impex.cxx +++ b/sc/source/ui/docshell/impex.cxx @@ -1068,7 +1068,7 @@ static bool lcl_PutString( else if ( nColFormat != SC_COL_STANDARD ) // Datumformats { const sal_uInt16 nMaxNumberParts = 7; // Y-M-D h:m:s.t - sal_Int32 nLen = rStr.getLength(); + const sal_Int32 nLen = rStr.getLength(); sal_Int32 nStart[nMaxNumberParts]; sal_Int32 nEnd[nMaxNumberParts]; @@ -1225,6 +1225,36 @@ static bool lcl_PutString( if (eStatus == rtl_math_ConversionStatus_Ok) fFrac = fV / 86400.0; } + sal_Int32 nPos; + if (nFound > 3 && 1 <= nHour && nHour <= 12 // nHour 0 and >=13 can't be AM/PM + && (nPos = nEnd[nFound-1] + 1) < nLen) + { + // Dreaded AM/PM may be following. + while (nPos < nLen && rStr[nPos] == ' ') + ++nPos; + if (nPos < nLen) + { + sal_Int32 nStop = nPos; + while (nStop < nLen && rStr[nStop] != ' ') + ++nStop; + OUString aAmPm = rStr.copy( nPos, nStop - nPos); + // For AM only 12 needs to be treated, whereas for PM + // it must not. Check both, locale and second/English + // strings. + if (nHour == 12 && + (rTransliteration.isEqual( aAmPm, pFormatter->GetLocaleData()->getTimeAM()) || + (pSecondTransliteration && pSecondTransliteration->isEqual( aAmPm, "AM")))) + { + nHour = 0; + } + else if (nHour < 12 && + (rTransliteration.isEqual( aAmPm, pFormatter->GetLocaleData()->getTimePM()) || + (pSecondTransliteration && pSecondTransliteration->isEqual( aAmPm, "PM")))) + { + nHour += 12; + } + } + } pCalendar->setValue( i18n::CalendarFieldIndex::HOUR, nHour ); pCalendar->setValue( i18n::CalendarFieldIndex::MINUTE, nMinute ); pCalendar->setValue( i18n::CalendarFieldIndex::SECOND, nSecond ); |