From 011efb4933b0ac2895a3eeae8020e16b41a3e33d Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 19 Aug 2025 21:27:58 +0500 Subject: [PATCH 1/2] Fixed timer for non-UTC zones --- Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs | 2 +- Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs index 4c75c7f2a..6034694f1 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs @@ -34,7 +34,7 @@ public DateTime GetInRaidTime(long timestamp) var twentyFourHoursSeconds = timeUtil.GetHoursAsSeconds(24); var currentTimestampSeconds = timestamp; - var tarkovTime = timeUtil.GetDateTimeFromTimeStamp( + var tarkovTime = timeUtil.GetUtcDateTimeFromTimeStamp( (long)(russiaOffsetSeconds + currentTimestampSeconds * _weatherConfig.Acceleration) % twentyFourHoursSeconds ); diff --git a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs index 67d524285..3bec2de2d 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs @@ -152,6 +152,11 @@ public DateTime GetDateTimeFromTimeStamp(long timeStamp) return DateTimeOffset.FromUnixTimeSeconds(timeStamp).DateTime; } + public DateTime GetUtcDateTimeFromTimeStamp(long timeStamp) + { + return DateTimeOffset.FromUnixTimeSeconds(timeStamp).UtcDateTime; + } + public int GetSecondsAsMilliseconds(int seconds) { return seconds * 60 * 1000; From 212d482febb3c48a6f88807a51f37ecbdb603c4a Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 19 Aug 2025 21:42:32 +0500 Subject: [PATCH 2/2] Added UT and removed unused method --- .../SPTarkov.Server.Core/Utils/TimeUtil.cs | 10 +++--- .../Tests/Helpers/WeatherHelperTests.cs | 33 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 Testing/UnitTests/Tests/Helpers/WeatherHelperTests.cs diff --git a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs index 3bec2de2d..2958293ae 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs @@ -152,16 +152,16 @@ public DateTime GetDateTimeFromTimeStamp(long timeStamp) return DateTimeOffset.FromUnixTimeSeconds(timeStamp).DateTime; } + /// + /// Takes a unix timestamp and converts to its UTC date + /// + /// + /// public DateTime GetUtcDateTimeFromTimeStamp(long timeStamp) { return DateTimeOffset.FromUnixTimeSeconds(timeStamp).UtcDateTime; } - public int GetSecondsAsMilliseconds(int seconds) - { - return seconds * 60 * 1000; - } - /// /// Get passed in minutes as seconds /// diff --git a/Testing/UnitTests/Tests/Helpers/WeatherHelperTests.cs b/Testing/UnitTests/Tests/Helpers/WeatherHelperTests.cs new file mode 100644 index 000000000..10a722aef --- /dev/null +++ b/Testing/UnitTests/Tests/Helpers/WeatherHelperTests.cs @@ -0,0 +1,33 @@ +using NUnit.Framework; +using SPTarkov.Server.Core.Helpers; + +namespace UnitTests.Tests.Helpers; + +[TestFixture] +public class WeatherHelperTests +{ + private WeatherHelper _weatherHelper; + + [OneTimeSetUp] + public void Initialize() + { + _weatherHelper = DI.GetInstance().GetService(); + } + + [TestCase(1755621231, 22, 56, 57)] + [TestCase(1754120368, 8, 36, 16)] + [TestCase(1714120368, 14, 49, 36)] + [TestCase(1724120368, 19, 16, 16)] + public void GetInRaidTime_WithDifferentTimestamps_ExpectCorrectEFTTime( + long timestamp, + int expectedHour, + int expectedMinute, + int expectedSecond) + { + var timeOutput = _weatherHelper.GetInRaidTime(timestamp); + + Assert.AreEqual(expectedHour, timeOutput.Hour, $"Unexpected hour! {timeOutput.Hour}"); + Assert.AreEqual(expectedMinute, timeOutput.Minute, $"Unexpected minute! {timeOutput.Minute}"); + Assert.AreEqual(expectedSecond, timeOutput.Second, $"Unexpected second! {timeOutput.Second}"); + } +}