From 35bf6067d493a988f779516b4bafde3fd7a98a39 Mon Sep 17 00:00:00 2001 From: JT Date: Thu, 26 Dec 2024 21:53:28 +0800 Subject: [PATCH] Remove substring allocations from time span extensions --- src/CoreTests/Core/TimeSpanExtensionsTester.cs | 1 + src/JasperFx/Core/TimeSpanExtensions.cs | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/CoreTests/Core/TimeSpanExtensionsTester.cs b/src/CoreTests/Core/TimeSpanExtensionsTester.cs index 3e2e792..686caf0 100644 --- a/src/CoreTests/Core/TimeSpanExtensionsTester.cs +++ b/src/CoreTests/Core/TimeSpanExtensionsTester.cs @@ -19,6 +19,7 @@ public void to_time_from_string() "0700".ToTime().ShouldBe(new TimeSpan(7, 0, 0)); "1700".ToTime().ShouldBe(new TimeSpan(17, 0, 0)); "1850".ToTime().ShouldBe(new TimeSpan(18, 50, 0)); + "19:05".ToTime().ShouldBe(new TimeSpan(19, 05, 00)); } [Fact] diff --git a/src/JasperFx/Core/TimeSpanExtensions.cs b/src/JasperFx/Core/TimeSpanExtensions.cs index d235f09..9437ba6 100644 --- a/src/JasperFx/Core/TimeSpanExtensions.cs +++ b/src/JasperFx/Core/TimeSpanExtensions.cs @@ -31,7 +31,7 @@ public static TimeSpan ToTime(this string timeString) public static TimeSpan GetTimeSpan(string timeString) { - var match = TimespanRegex().Match(timeString.Trim()); + var match = TimespanRegex().Match(timeString); if (!match.Success) { return TimeSpan.Parse(timeString); @@ -62,20 +62,21 @@ public static TimeSpan GetTimeSpan(string timeString) case "days": return TimeSpan.FromDays(number); } + + var timeSpan = timeString.AsSpan(); if (timeString.Length == 4 && !timeString.Contains(':')) { - int hours = int.Parse(timeString.Substring(0, 2)); - int minutes = int.Parse(timeString.Substring(2, 2)); + int hours = int.Parse(timeSpan.Slice(0, 2)); + int minutes = int.Parse(timeSpan.Slice(2, 2)); return new TimeSpan(hours, minutes, 0); } if (timeString.Length == 5 && timeString.Contains(':')) { - var parts = timeString.Split(':'); - int hours = int.Parse(parts.ElementAt(0)); - int minutes = int.Parse(parts.ElementAt(1)); + int hours = int.Parse(timeSpan.Slice(0, 2)); + int minutes = int.Parse(timeSpan.Slice(3)); return new TimeSpan(hours, minutes, 0); }