Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 60a90b2

Browse files
Serializing DateTimeOffset objects with ISO8601
Failure to do so will lead to inconsistent results, especially with users that have a custom system-wide date time string.
1 parent 85e8d7c commit 60a90b2

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

src/GitHub.Api/Helpers/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ static class Constants
99
public const string UsageFile = "usage.json";
1010
public const string GitInstallPathKey = "GitInstallPath";
1111
public const string TraceLoggingKey = "EnableTraceLogging";
12+
public const string Iso8601Format = "o";
1213

1314
public static readonly Version MinimumGitVersion = new Version(2, 11, 0);
1415
public static readonly Version MinimumGitLfsVersion = new Version(2, 3, 4);

src/GitHub.Api/OutputProcessors/LogEntryOutputProcessor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ private void ReturnGitLogEntry()
329329
Summary = summary,
330330
Description = description,
331331
CommitID = commitId,
332-
TimeString = time.Value.ToString(DateTimeFormatInfo.CurrentInfo),
333-
CommitTimeString = committerTime.Value.ToString(DateTimeFormatInfo.CurrentInfo)
332+
TimeString = time.Value.ToString(Constants.Iso8601Format),
333+
CommitTimeString = committerTime.Value.ToString(Constants.Iso8601Format)
334334
});
335335
}
336336

src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using System.Linq;
4-
using Octokit;
55
using UnityEditor;
66
using UnityEngine;
77
using Application = UnityEngine.Application;
@@ -92,7 +92,6 @@ abstract class ManagedCacheBase<T> : ScriptObjectSingleton<T> where T : Scriptab
9292
private static readonly TimeSpan DataTimeout = TimeSpan.MaxValue;
9393

9494
[NonSerialized] private DateTimeOffset? lastUpdatedAtValue;
95-
9695
[NonSerialized] private DateTimeOffset? lastVerifiedAtValue;
9796

9897
public event Action CacheInvalidated;
@@ -148,14 +147,22 @@ public DateTimeOffset LastUpdatedAt
148147
{
149148
if (!lastUpdatedAtValue.HasValue)
150149
{
151-
lastUpdatedAtValue = DateTimeOffset.Parse(LastUpdatedAtString);
150+
DateTimeOffset result;
151+
if (DateTimeOffset.TryParseExact(LastUpdatedAtString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
152+
{
153+
lastUpdatedAtValue = result;
154+
}
155+
else
156+
{
157+
lastUpdatedAtValue = DateTimeOffset.MinValue;
158+
}
152159
}
153160

154161
return lastUpdatedAtValue.Value;
155162
}
156163
set
157164
{
158-
LastUpdatedAtString = value.ToString();
165+
LastUpdatedAtString = value.ToString(Constants.Iso8601Format);
159166
lastUpdatedAtValue = null;
160167
}
161168
}
@@ -166,14 +173,22 @@ public DateTimeOffset LastVerifiedAt
166173
{
167174
if (!lastVerifiedAtValue.HasValue)
168175
{
169-
lastVerifiedAtValue = DateTimeOffset.Parse(LastVerifiedAtString);
176+
DateTimeOffset result;
177+
if (DateTimeOffset.TryParseExact(LastVerifiedAtString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
178+
{
179+
lastVerifiedAtValue = result;
180+
}
181+
else
182+
{
183+
lastVerifiedAtValue = DateTimeOffset.MinValue;
184+
}
170185
}
171186

172187
return lastVerifiedAtValue.Value;
173188
}
174189
set
175190
{
176-
LastVerifiedAtString = value.ToString();
191+
LastVerifiedAtString = value.ToString(Constants.Iso8601Format);
177192
lastVerifiedAtValue = null;
178193
}
179194
}

0 commit comments

Comments
 (0)