diff options
author | Muhammet Kara <muhammet.kara@pardus.org.tr> | 2016-04-18 17:18:47 +0300 |
---|---|---|
committer | jan iversen <jani@documentfoundation.org> | 2016-04-19 08:36:43 +0000 |
commit | 97dee1df42dc2933d1350eb1e67361674614417a (patch) | |
tree | bba2bc74deda705b365cc750dc79f05b0e6e4e6c | |
parent | df784ec1bf3d1745a291056df28bec799d4fdee3 (diff) |
WIP tdf#89609 Ignore subsecond precision in iso8601
Explorer shell extension fails to convert date
into locale specific string if it has sub-second
precision.
Change-Id: I11bd38fc2876aa1f8235dbfb8c7850ff22ac2a8b
Reviewed-on: https://gerrit.libreoffice.org/24220
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: jan iversen <jani@documentfoundation.org>
-rw-r--r-- | shell/inc/iso8601_converter.hxx | 3 | ||||
-rw-r--r-- | shell/source/win32/shlxthandler/util/iso8601_converter.cxx | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/shell/inc/iso8601_converter.hxx b/shell/inc/iso8601_converter.hxx index ee682823cf4f..570cecbef4e5 100644 --- a/shell/inc/iso8601_converter.hxx +++ b/shell/inc/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 36ab617441e6..9933a9c41805 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 ); |