From 1f65929abcad0e6735efc86a8ad0e187d3e1d1ba Mon Sep 17 00:00:00 2001 From: Darren Hull Date: Wed, 6 Mar 2019 16:31:50 +0000 Subject: [PATCH 1/4] Fix Java Datetime serialisation issues. --- Camunda.Api.Client.Tests/DateTimeTests.cs | 25 +++++++++++++++++++++++ Camunda.Api.Client/DateTimeExtensions.cs | 18 +++++++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 Camunda.Api.Client.Tests/DateTimeTests.cs diff --git a/Camunda.Api.Client.Tests/DateTimeTests.cs b/Camunda.Api.Client.Tests/DateTimeTests.cs new file mode 100644 index 0000000..dc5c440 --- /dev/null +++ b/Camunda.Api.Client.Tests/DateTimeTests.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Camunda.Api.Client.ProcessInstance; +using Refit; +using RichardSzalay.MockHttp; +using Xunit; + +namespace Camunda.Api.Client.Tests +{ + public class DateTimeTests + { + [Theory] + [InlineData("2010-01-01T01:01:01", "2010-01-01T01:01:01.000+0000")] + [InlineData("2010-05-01T01:01:01", "2010-05-01T01:01:01.000+0100")] + public void GetDateTime(string testDateTimeString,string expectedDatetimeString) + { + var actualIso8601DateString = DateTime.Parse(testDateTimeString).ToJavaISO8601(); + Assert.Equal(expectedDatetimeString, actualIso8601DateString); + } + } +} diff --git a/Camunda.Api.Client/DateTimeExtensions.cs b/Camunda.Api.Client/DateTimeExtensions.cs index 92ef938..3facc23 100644 --- a/Camunda.Api.Client/DateTimeExtensions.cs +++ b/Camunda.Api.Client/DateTimeExtensions.cs @@ -1,16 +1,28 @@ using System; using System.Globalization; +using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("Camunda.Api.Client.Tests")] namespace Camunda.Api.Client { internal static class DateTimeExtensions { - const string _dateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFF"; + const string _dateTimeFormat = "yyyy-MM-ddTHH\\:mm\\:ss.fffzzz"; public static string ToJavaISO8601(this DateTime dateTime) { - return dateTime.ToString(_dateTimeFormat, CultureInfo.InvariantCulture) - + dateTime.ToString("%K").Replace(":", "").Replace("Z", "UTC"); + return ReplaceLastOccurrence(dateTime.ToString(_dateTimeFormat, CultureInfo.InvariantCulture), ":", ""); + } + + private static string ReplaceLastOccurrence(string Source, string Find, string Replace) + { + int place = Source.LastIndexOf(Find); + + if (place == -1) + return Source; + + return Source.Remove(place, Find.Length).Insert(place, Replace); + } } } From fe7de5ee8ccc8a1069de139e1d30aa5d31e5af8f Mon Sep 17 00:00:00 2001 From: Darren Hull Date: Mon, 11 Mar 2019 08:16:53 +0000 Subject: [PATCH 2/4] updated version --- Camunda.Api.Client/Camunda.Api.Client.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Camunda.Api.Client/Camunda.Api.Client.csproj b/Camunda.Api.Client/Camunda.Api.Client.csproj index 660f28e..0053050 100644 --- a/Camunda.Api.Client/Camunda.Api.Client.csproj +++ b/Camunda.Api.Client/Camunda.Api.Client.csproj @@ -1,10 +1,10 @@  - netstandard2.0;net461 + netstandard2.0 true true - 2.4.1 + 2.4.1-beta Camunda REST API Client Camunda REST API Client Jan Lucansky From 1076d56b10caf479c5a54569e150c56186c6684e Mon Sep 17 00:00:00 2001 From: jlucansky Date: Tue, 23 Apr 2019 13:41:00 +0200 Subject: [PATCH 3/4] Properly format different DateTime kinds to Java ISO8601 format --- Camunda.Api.Client/DateTimeExtensions.cs | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/Camunda.Api.Client/DateTimeExtensions.cs b/Camunda.Api.Client/DateTimeExtensions.cs index 3facc23..b5a008b 100644 --- a/Camunda.Api.Client/DateTimeExtensions.cs +++ b/Camunda.Api.Client/DateTimeExtensions.cs @@ -7,22 +7,14 @@ namespace Camunda.Api.Client { internal static class DateTimeExtensions { - const string _dateTimeFormat = "yyyy-MM-ddTHH\\:mm\\:ss.fffzzz"; + const string _dateTimeFormat = "yyyy-MM-ddTHH':'mm':'ss.fff"; public static string ToJavaISO8601(this DateTime dateTime) { - return ReplaceLastOccurrence(dateTime.ToString(_dateTimeFormat, CultureInfo.InvariantCulture), ":", ""); - } - - private static string ReplaceLastOccurrence(string Source, string Find, string Replace) - { - int place = Source.LastIndexOf(Find); - - if (place == -1) - return Source; - - return Source.Remove(place, Find.Length).Insert(place, Replace); - + if (dateTime.Kind == DateTimeKind.Unspecified) // treat unspecified time as local time + dateTime = new DateTime(dateTime.Ticks, DateTimeKind.Local); + return dateTime.ToString(_dateTimeFormat, CultureInfo.InvariantCulture) + + dateTime.ToString("%K").Replace(":", "").Replace("Z", "+0000"); } } } From eb91ab477adc2f6fd2bde494f4c2b90b4e651301 Mon Sep 17 00:00:00 2001 From: jlucansky Date: Tue, 23 Apr 2019 15:21:23 +0200 Subject: [PATCH 4/4] Update version --- Camunda.Api.Client/Camunda.Api.Client.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Camunda.Api.Client/Camunda.Api.Client.csproj b/Camunda.Api.Client/Camunda.Api.Client.csproj index 0053050..fddb817 100644 --- a/Camunda.Api.Client/Camunda.Api.Client.csproj +++ b/Camunda.Api.Client/Camunda.Api.Client.csproj @@ -1,10 +1,10 @@  - netstandard2.0 + netstandard2.0;net461 true true - 2.4.1-beta + 2.4.2 Camunda REST API Client Camunda REST API Client Jan Lucansky