From 18d3180bc299fac8a72a664378f30029596441e9 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Thu, 21 Dec 2023 15:57:09 +0800 Subject: [PATCH] more announcement time fix --- src/Snap.Hutao/Snap.Hutao/Core/UnsafeDateTimeOffset.cs | 8 ++++++++ src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs | 9 +++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Core/UnsafeDateTimeOffset.cs b/src/Snap.Hutao/Snap.Hutao/Core/UnsafeDateTimeOffset.cs index f2fcb833..54e818ae 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/UnsafeDateTimeOffset.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/UnsafeDateTimeOffset.cs @@ -2,12 +2,20 @@ // Licensed under the MIT license. using System.Diagnostics.Contracts; +using System.Globalization; using System.Runtime.CompilerServices; namespace Snap.Hutao.Core; internal static class UnsafeDateTimeOffset { + [SuppressMessage("", "SH002")] + public static DateTimeOffset ParseDateTime(ReadOnlySpan span, TimeSpan offset) + { + DateTime dateTime = DateTime.Parse(span, CultureInfo.InvariantCulture); + return new(dateTime, offset); + } + [Pure] [SuppressMessage("", "SH002")] public static unsafe DateTimeOffset AdjustOffsetOnly(DateTimeOffset dateTimeOffset, in TimeSpan offset) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs index cce61bee..2789b395 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs @@ -110,8 +110,7 @@ internal sealed partial class AnnouncementService : IAnnouncementService return; } - DateTimeOffset rawVersionUpdateTime = DateTimeOffset.Parse(versionMatch.Groups[1].ValueSpan, CultureInfo.InvariantCulture); - DateTimeOffset versionUpdateTime = UnsafeDateTimeOffset.AdjustOffsetOnly(rawVersionUpdateTime, offset); + DateTimeOffset versionUpdateTime = UnsafeDateTimeOffset.ParseDateTime(versionMatch.Groups[1].ValueSpan, offset); foreach (ref readonly Announcement announcement in CollectionsMarshal.AsSpan(activities)) { @@ -131,8 +130,7 @@ internal sealed partial class AnnouncementService : IAnnouncementService if (AnnouncementRegex.TransientActivityAfterUpdateTimeRegex.Match(announcement.Content) is { Success: true } transient) { announcement.StartTime = versionUpdateTime; - DateTimeOffset rawEndTime = DateTimeOffset.Parse(transient.Groups[2].ValueSpan, CultureInfo.InvariantCulture); - announcement.EndTime = UnsafeDateTimeOffset.AdjustOffsetOnly(rawEndTime, offset); + announcement.EndTime = UnsafeDateTimeOffset.ParseDateTime(transient.Groups[2].ValueSpan, offset); continue; } @@ -145,8 +143,7 @@ internal sealed partial class AnnouncementService : IAnnouncementService List dateTimes = []; foreach (Match timeMatch in (IList)matches) { - DateTimeOffset raw = DateTimeOffset.Parse(timeMatch.Groups[1].ValueSpan, CultureInfo.InvariantCulture); - dateTimes.Add(UnsafeDateTimeOffset.AdjustOffsetOnly(raw, offset)); + dateTimes.Add(UnsafeDateTimeOffset.ParseDateTime(timeMatch.Groups[1].ValueSpan, offset)); } DateTimeOffset min = DateTimeOffset.MaxValue;