From d4c437f9d3fee0eaf5c471ef2a851ba9988615ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ertug=CC=86rul=20O=CC=88zcan?= Date: Fri, 21 Jun 2019 17:34:18 +0300 Subject: [PATCH 1/2] Extract method refactoring for fractional seconds removing --- src/Utils/DateTimeUtils.cs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Utils/DateTimeUtils.cs b/src/Utils/DateTimeUtils.cs index 20a2cfd..57b318f 100644 --- a/src/Utils/DateTimeUtils.cs +++ b/src/Utils/DateTimeUtils.cs @@ -234,18 +234,8 @@ private static bool TryParseDateRfc3339(string dateTimeString, out DateTimeOffse const string Rfc3339LocalDateTimeFormat = "yyyy-MM-ddTHH:mm:sszzz"; const string Rfc3339UTCDateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; - dateTimeString = dateTimeString.Trim(); - - if (dateTimeString[19] == '.') - { - // remove any fractional seconds, we choose to ignore them - int i = 20; - while (dateTimeString.Length > i && char.IsDigit(dateTimeString[i])) - { - ++i; - } - dateTimeString = dateTimeString.Substring(0, 19) + dateTimeString.Substring(i); - } + // remove any fractional seconds, we choose to ignore them + dateTimeString = RemoveFractionalSeconds(dateTimeString); DateTimeOffset localTime; if (DateTimeOffset.TryParseExact(dateTimeString, Rfc3339LocalDateTimeFormat, @@ -255,6 +245,7 @@ private static bool TryParseDateRfc3339(string dateTimeString, out DateTimeOffse result = localTime; return true; } + DateTimeOffset utcTime; if (DateTimeOffset.TryParseExact(dateTimeString, Rfc3339UTCDateTimeFormat, CultureInfo.InvariantCulture.DateTimeFormat, @@ -263,7 +254,26 @@ private static bool TryParseDateRfc3339(string dateTimeString, out DateTimeOffse result = utcTime; return true; } + return false; } + + private static string RemoveFractionalSeconds(string dateTimeString) + { + dateTimeString = dateTimeString.Trim(); + + if (dateTimeString[19] == '.') + { + int i = 20; + while (dateTimeString.Length > i && char.IsDigit(dateTimeString[i])) + { + ++i; + } + + dateTimeString = dateTimeString.Substring(0, 19) + dateTimeString.Substring(i); + } + + return dateTimeString; + } } } From 80cfbddbd23efc973e85147c1cb31e0be60ee417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ertug=CC=86rul=20O=CC=88zcan?= Date: Fri, 21 Jun 2019 17:35:42 +0300 Subject: [PATCH 2/2] Check dateTimeString length on RemoveFractionalSeconds method --- src/Utils/DateTimeUtils.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Utils/DateTimeUtils.cs b/src/Utils/DateTimeUtils.cs index 57b318f..008cbf4 100644 --- a/src/Utils/DateTimeUtils.cs +++ b/src/Utils/DateTimeUtils.cs @@ -257,11 +257,14 @@ private static bool TryParseDateRfc3339(string dateTimeString, out DateTimeOffse return false; } - + private static string RemoveFractionalSeconds(string dateTimeString) { dateTimeString = dateTimeString.Trim(); + if (dateTimeString.Length < 20 || dateTimeString.IndexOf('.') < 0) + return dateTimeString; + if (dateTimeString[19] == '.') { int i = 20;