From f8472069d451ec001e602bbc5329ad030fae1219 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 1 May 2019 07:22:44 +0300 Subject: tdf#125055: properly round fractions of seconds ... so that 2017-07-10T09:11:02.999999... becomes 2017-07-10T09:11:03, not 2017-07-10T09:11:02. The latter created duplicated items in pivot table cache previously. TODO: check what to do if the times are actually different by 100 ns? What Excel does then? Should we increase cache item precision? Change-Id: I622d1c784ee9fddf6b387bec2d8af87bae5668ba Reviewed-on: https://gerrit.libreoffice.org/71610 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- sc/source/filter/excel/xepivotxml.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'sc/source/filter/excel') diff --git a/sc/source/filter/excel/xepivotxml.cxx b/sc/source/filter/excel/xepivotxml.cxx index 8c263795fe94..dc825f0c836b 100644 --- a/sc/source/filter/excel/xepivotxml.cxx +++ b/sc/source/filter/excel/xepivotxml.cxx @@ -192,8 +192,10 @@ namespace { */ OUString GetExcelFormattedDate( double fSerialDateTime, const SvNumberFormatter& rFormatter ) { - //::sax::Converter::convertDateTime(sBuf, (DateTime(rFormatter.GetNullDate()) + fSerialDateTime).GetUNODateTime(), 0, true); - css::util::DateTime aUDateTime = (DateTime(rFormatter.GetNullDate()) + fSerialDateTime).GetUNODateTime(); + // tdf#125055: properly round the value to seconds when truncating nanoseconds below + constexpr double fHalfSecond = 1 / 86400.0 * 0.5; + css::util::DateTime aUDateTime + = (DateTime(rFormatter.GetNullDate()) + fSerialDateTime + fHalfSecond).GetUNODateTime(); // We need to reset nanoseconds, to avoid string like: "1982-02-18T16:04:47.999999849" aUDateTime.NanoSeconds = 0; OUStringBuffer sBuf; -- cgit