Skip to content

Commit 62e8dda

Browse files
Enhance date handling and optimize ULID generation
Updated DateOnlyConverter.cs to handle FormatException in Read method. Refactored UlidGenerator.cs to use Parallel.For in GenerateMultipleUlids and updated BenchmarkStatus. Added ToFriendlyDateString method in DateTimeExtensions.cs.
1 parent 628fdb6 commit 62e8dda

3 files changed

Lines changed: 12 additions & 12 deletions

File tree

source/dotNetTips.Spargine.8.Core/Data/Converters/DateOnlyConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 01-10-2025
55
//
66
// Last Modified By : David McCarter
7-
// Last Modified On : 01-10-2025
7+
// Last Modified On : 01-30-2025
88
// ***********************************************************************
99
// <copyright file="DateOnlyConverter.cs" company="David McCarter - dotNetTips.com">
1010
// McCarter Consulting (David McCarter)
@@ -49,6 +49,7 @@ public DateOnlyConverter() : this(null) { }
4949
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
5050
{
5151
var value = reader.GetString();
52+
5253
try
5354
{
5455
return DateOnly.Parse(value!, IsoDateTimeOffsetConverter.Singleton.Culture);

source/dotNetTips.Spargine.8.Core/Security/UlidGenerator.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Created : 08-03-2024
55
//
66
// Last Modified By : David McCarter
7-
// Last Modified On : 01-27-2025
7+
// Last Modified On : 01-30-2025
88
// ***********************************************************************
99
// <copyright file="UlidGenerator.cs" company="David McCarter - dotNetTips.com">
1010
// McCarter Consulting (David McCarter)
@@ -109,15 +109,12 @@ private static byte[] GetRandomBytes()
109109
/// <param name="count">The number of ULIDs to generate.</param>
110110
/// <returns>A read-only collection of generated ULIDs.</returns>
111111
/// <exception cref="ArgumentOutOfRangeException">Thrown if the count is less than or equal to zero.</exception>
112-
[Information("Generates multiple ULIDs based on the specified count.", UnitTestStatus = UnitTestStatus.Completed, OptimizationStatus = OptimizationStatus.Completed, BenchmarkStatus = BenchmarkStatus.Completed, Status = Status.Available)]
112+
[Information("Generates multiple ULIDs based on the specified count.", UnitTestStatus = UnitTestStatus.Completed, OptimizationStatus = OptimizationStatus.Completed, BenchmarkStatus = BenchmarkStatus.CheckPerformance, Status = Status.Available)]
113113
public static ReadOnlyCollection<string> GenerateMultipleUlids(int count)
114114
{
115115
var ulids = new List<string>(count.ArgumentInRange(1, defaultValue: 1));
116116

117-
for (var index = 0; index < count; index++)
118-
{
119-
ulids.Add(GenerateUlid());
120-
}
117+
_ = Parallel.For(0, count, index => ulids[index] = GenerateUlid());
121118

122119
return ulids.AsReadOnly();
123120
}
@@ -129,13 +126,10 @@ public static ReadOnlyCollection<string> GenerateMultipleUlids(int count)
129126
[Information("Generates a new ULID.", UnitTestStatus = UnitTestStatus.Completed, OptimizationStatus = OptimizationStatus.Completed, BenchmarkStatus = BenchmarkStatus.Completed, Status = Status.Available)]
130127
public static string GenerateUlid()
131128
{
132-
var timestamp = GetTimestamp().AsSpan();
133-
var randomBytes = GetRandomBytes().AsSpan();
134-
135129
var ulidChars = new char[26].AsSpan();
136130

137-
EncodeBase32(timestamp, ulidChars, 0, TimestampLength);
138-
EncodeBase32(randomBytes, ulidChars, TimestampLength, RandomLength);
131+
EncodeBase32(GetTimestamp().AsSpan(), ulidChars, 0, TimestampLength);
132+
EncodeBase32(GetRandomBytes().AsSpan(), ulidChars, TimestampLength, RandomLength);
139133

140134
return new string(ulidChars);
141135
}

source/dotNetTips.Spargine.8.Extensions/DateTimeExtensions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,11 @@ public static bool IsInRangeThrowsException(this in DateTimeOffset value, in Dat
288288
/// </example>
289289
[Information(nameof(ToFriendlyDateString), author: "David McCarter", createdOn: "7/15/2020", UnitTestStatus = UnitTestStatus.Completed, Status = Status.Available)]
290290
public static string ToFriendlyDateString(this in DateTime input)
291+
{
292+
return FormatFriendlyDateString(input);
293+
}
294+
295+
private static string FormatFriendlyDateString(DateTime input)
291296
{
292297
string formattedDate;
293298

0 commit comments

Comments
 (0)