Skip to content

Commit 2dc2857

Browse files
committed
Added method to parse strings to timestamps
1 parent 9a125f9 commit 2dc2857

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

Net.Bluewalk.DotNetUtils/Extensions/StringExtensions.cs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,11 @@ public static T ToEnumValue<T>(this string value, string defaultValue = "Unspeci
126126
{
127127
try
128128
{
129-
return (T) Enum.Parse(typeof(T), value, true);
129+
return (T)Enum.Parse(typeof(T), value, true);
130130
}
131131
catch
132132
{
133-
return (T) Enum.Parse(typeof(T), defaultValue, true);
133+
return (T)Enum.Parse(typeof(T), defaultValue, true);
134134
}
135135
}
136136

@@ -186,7 +186,7 @@ public static double ToDouble(this string value, double defaultValue)
186186
if (string.IsNullOrEmpty(value)) return defaultValue;
187187

188188
if (!double.TryParse(value.Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture,
189-
out var result))
189+
out var result))
190190
if (!double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
191191
result = defaultValue;
192192

@@ -349,7 +349,7 @@ public static T DeserializeXml<T>(this string value)
349349
var ser = new XmlSerializer(typeof(T));
350350

351351
using var sr = new StringReader(value);
352-
return (T) ser.Deserialize(sr);
352+
return (T)ser.Deserialize(sr);
353353
}
354354

355355
/// <summary>
@@ -520,5 +520,37 @@ public static string ReplaceEnd(this string source, string value, string replace
520520
{
521521
return Regex.Replace(source, $"{value}$", replacement);
522522
}
523+
524+
/// <summary>
525+
/// Converts a string to a timespan
526+
/// eg 1m = 00:01:00, 2h = 02:00:00, 3h50m = 03:50:00
527+
/// qualifiers are: [d]ays, [h]ours, [m]inutes, [s]econds, [ms]econds
528+
/// </summary>
529+
/// <param name="value"></param>
530+
/// <returns></returns>
531+
public static TimeSpan ToTimeSpan(this string value)
532+
{
533+
var matches = Regex.Matches(value, "(?<number>[0-9]+)(?<qualifier>[dhms]+)", RegexOptions.IgnoreCase);
534+
if (matches.Count == 0) return TimeSpan.Zero;
535+
536+
var result = TimeSpan.Zero;
537+
538+
foreach (Match match in matches)
539+
{
540+
var number = Convert.ToInt32(match.Groups["number"].Value);
541+
542+
result = result.Add(match.Groups["qualifier"].Value.ToLower() switch
543+
{
544+
"d" => TimeSpan.FromDays(number),
545+
"h" => TimeSpan.FromHours(number),
546+
"m" => TimeSpan.FromMinutes(number),
547+
"s" => TimeSpan.FromSeconds(number),
548+
"ms" => TimeSpan.FromMilliseconds(number),
549+
_ => TimeSpan.Zero
550+
});
551+
}
552+
553+
return result;
554+
}
523555
}
524-
}
556+
}

Net.Bluewalk.DotNetUtils/Net.Bluewalk.DotNetUtils.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1515
<RepositoryType>Git</RepositoryType>
1616
<PackageReleaseNotes></PackageReleaseNotes>
17-
<Version>2022.1.16.1</Version>
18-
<AssemblyVersion>2022.1.16.1</AssemblyVersion>
19-
<FileVersion>2022.1.16.1</FileVersion>
20-
<PackageVersion>2022.1.16.1</PackageVersion>
17+
<Version>2022.5.13.1</Version>
18+
<AssemblyVersion>2022.5.13.1</AssemblyVersion>
19+
<FileVersion>2022.5.13.1</FileVersion>
20+
<PackageVersion>2022.5.13.1</PackageVersion>
2121
</PropertyGroup>
2222

2323
<ItemGroup>

0 commit comments

Comments
 (0)