diff options
-rw-r--r-- | svl/source/numbers/zforscan.cxx | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx index 5fcddb0a2a11..117c7f2e698a 100644 --- a/svl/source/numbers/zforscan.cxx +++ b/svl/source/numbers/zforscan.cxx @@ -1156,9 +1156,12 @@ sal_Int32 ImpSvNumberformatScan::ScanType() Minute if one of: * preceded by time keyword H (ignoring separators) * followed by time keyword S (ignoring separators) - * H or S was detected + * H or S was detected and this is the first M following * preceded by '[' amount bracket Else month. + That are the Excel rules. BUT, we break it because certainly + in something like {HH YYYY-MM-DD} the MM is NOT meant to be + minute, so not if MM is between YY and DD or DD and YY. */ nIndexPre = PreviousKeyword(i); nIndexNex = NextKeyword(i); @@ -1166,7 +1169,12 @@ sal_Int32 ImpSvNumberformatScan::ScanType() nIndexPre == NF_KEY_HH || // HH nIndexNex == NF_KEY_S || // S nIndexNex == NF_KEY_SS || // SS - bIsTimeDetected || // tdf#101147 + (bIsTimeDetected && + !(((nIndexPre == NF_KEY_YY || nIndexPre == NF_KEY_YYYY) && + (nIndexNex == NF_KEY_D || nIndexNex == NF_KEY_DD)) || + ((nIndexPre == NF_KEY_D || nIndexPre == NF_KEY_DD) && + (nIndexNex == NF_KEY_YY || nIndexNex == NF_KEY_YYYY))) + ) || // tdf#101147 PreviousChar(i) == '[' ) // [M { eNewType = css::util::NumberFormat::TIME; |