summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuhammet Kara <muhammet.kara@pardus.org.tr>2016-04-18 17:18:47 +0300
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2016-04-19 23:05:27 +0000
commit95a8f1bb0ad7c040b2c96ef0a509dd74dfe16fd7 (patch)
tree568a6c88ef87ef32bb99ecfd5c0d6656d23b6813
parent16f75ee570ece3a367ed0f6b53bd9cfae100356f (diff)
tdf#89609 Ignore subsecond precision in iso8601_date_to_local_date
Explorer shell extension fails to convert date into locale specific string if it has sub-second precision. Reviewed-on: https://gerrit.libreoffice.org/24220 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: jan iversen <jani@documentfoundation.org> (cherry picked from commit 97dee1df42dc2933d1350eb1e67361674614417a) Change-Id: I11bd38fc2876aa1f8235dbfb8c7850ff22ac2a8b Reviewed-on: https://gerrit.libreoffice.org/24250 Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r--shell/inc/internal/iso8601_converter.hxx3
-rw-r--r--shell/source/win32/shlxthandler/util/iso8601_converter.cxx9
2 files changed, 11 insertions, 1 deletions
diff --git a/shell/inc/internal/iso8601_converter.hxx b/shell/inc/internal/iso8601_converter.hxx
index ee682823cf4f..570cecbef4e5 100644
--- a/shell/inc/internal/iso8601_converter.hxx
+++ b/shell/inc/internal/iso8601_converter.hxx
@@ -25,7 +25,8 @@
/* Converts ISO 8601 conform date/time
represenation to the representation
- conforming to the current locale
+ conforming to the current locale,
+ ignoring the milliseconds part if exists
*/
std::wstring iso8601_date_to_local_date(const std::wstring& iso8601date);
diff --git a/shell/source/win32/shlxthandler/util/iso8601_converter.cxx b/shell/source/win32/shlxthandler/util/iso8601_converter.cxx
index a033978d2c5e..e13f9779374c 100644
--- a/shell/source/win32/shlxthandler/util/iso8601_converter.cxx
+++ b/shell/source/win32/shlxthandler/util/iso8601_converter.cxx
@@ -36,6 +36,15 @@ std::wstring iso8601_date_to_local_date(const std::wstring& isoDate )
{
::std::wstring ws8601DateTime(isoDate);
+ // Get rid of the optional milliseconds part if it exists.
+ // Function accepts date/time as a combined date/time string in extended ISO8601 format,
+ // which is yyyy-mm-ddThh:mm:ss[.mmm]. Last part is the optional "fraction of second" part,
+ // that's why we cut off at 19.
+ if (ws8601DateTime.length() > 19)
+ {
+ ws8601DateTime.erase(19, ::std::basic_string<char>::npos);
+ }
+
if ( ws8601DateTime.length() == 19 )
{
std::string asDateTime = WStringToString( ws8601DateTime );