Added DateTimeExtensions

This commit is contained in:
Chomp
2025-06-28 16:41:26 +01:00
parent d4d2ed0403
commit 7782806f91
4 changed files with 98 additions and 61 deletions
@@ -0,0 +1,85 @@
namespace SPTarkov.Server.Core.Extensions
{
public static class DateTimeExtensions
{
/// <summary>
/// Formats the time part of a date as a UTC string.
/// </summary>
/// <param name="dateTimeOffset">The date to format in UTC.</param>
/// <returns>The formatted time as 'HH-MM-SS'.</returns>
public static string FormatToBsgTime(this DateTimeOffset dateTimeOffset)
{
var universalTime = dateTimeOffset.ToUniversalTime();
var hour = Pad(universalTime.Hour);
var minute = Pad(universalTime.Minute);
var second = Pad(universalTime.Second);
return $"{hour}-{minute}-{second}";
}
/// <summary>
/// Formats the time part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted time as 'HH-MM-SS'.</returns>
public static string FormatToBsgTime(this DateTime dateTime)
{
var universalTime = dateTime.ToUniversalTime();
var hour = Pad(universalTime.Hour);
var minute = Pad(universalTime.Minute);
var second = Pad(universalTime.Second);
return $"{hour}-{minute}-{second}";
}
/// <summary>
/// Formats the date part of a date as a UTC string.
/// </summary>
/// <param name="dateTimeOffset">The date to format in UTC.</param>
/// <returns>The formatted date as 'YYYY-MM-DD'.</returns>
public static string FormatToBsgDate(this DateTimeOffset dateTimeOffset)
{
var universalTime = dateTimeOffset.ToUniversalTime();
var day = Pad(universalTime.Day);
var month = Pad(universalTime.Month);
var year = Pad(universalTime.Year);
return $"{year}-{month}-{day}";
}
/// <summary>
/// Formats the date part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted date as 'YYYY-MM-DD'.</returns>
public static string FormatToBsgDate(this DateTime dateTime)
{
var universalTime = dateTime.ToUniversalTime();
var day = Pad(universalTime.Day);
var month = Pad(universalTime.Month);
var year = Pad(universalTime.Year);
return $"{year}-{month}-{day}";
}
/// <summary>
/// Pads a number with a leading zero if it is less than 10.
/// </summary>
/// <param name="number">The number to pad.</param>
/// <returns>The padded number as a string.</returns>
private static string Pad(int number)
{
return number.ToString().PadLeft(2, '0');
}
/// <summary>
/// Get current time formatted to fit BSGs requirement
/// </summary>
/// <param name="date"> Date to format into bsg style </param>
/// <returns> Time formatted in BSG format </returns>
public static string GetBsgFormattedWeatherTime(this DateTime date)
{
return date.FormatToBsgTime().Replace("-", ":").Replace("-", ":");
}
}
}
@@ -1,4 +1,5 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
using SPTarkov.Server.Core.Helpers;
using SPTarkov.Server.Core.Models.Eft.Weather;
using SPTarkov.Server.Core.Models.Enums;
@@ -29,7 +30,7 @@ public class WeatherGenerator(
public void CalculateGameTime(WeatherData data)
{
var computedDate = _timeUtil.GetDateTimeNow();
var formattedDate = _timeUtil.FormatDate(computedDate);
var formattedDate = computedDate.FormatToBsgDate();
data.Date = formattedDate;
data.Time = GetBsgFormattedInRaidTime();
@@ -45,19 +46,7 @@ public class WeatherGenerator(
/// <returns>Formatted time as String </returns>
protected string GetBsgFormattedInRaidTime()
{
var clientAcceleratedDate = _weatherHelper.GetInRaidTime();
return GetBsgFormattedTime(clientAcceleratedDate);
}
/// <summary>
/// Get current time formatted to fit BSGs requirement
/// </summary>
/// <param name="date"> Date to format into bsg style </param>
/// <returns> Time formatted in BSG format </returns>
protected string GetBsgFormattedTime(DateTime date)
{
return _timeUtil.FormatTime(date).Replace("-", ":").Replace("-", ":");
return _weatherHelper.GetInRaidTime().GetBsgFormattedWeatherTime();
}
/// <summary>
@@ -150,12 +139,12 @@ public class WeatherGenerator(
var inRaidTime = timestamp is null
? _weatherHelper.GetInRaidTime()
: _weatherHelper.GetInRaidTime(timestamp.Value);
var normalTime = GetBsgFormattedTime(inRaidTime);
var formattedDate = _timeUtil.FormatDate(
var normalTime = inRaidTime.GetBsgFormattedWeatherTime();
var formattedDate = (
timestamp.HasValue
? _timeUtil.GetDateTimeFromTimeStamp(timestamp.Value)
: DateTime.UtcNow
);
).FormatToBsgDate();
var datetimeBsgFormat = $"{formattedDate} {normalTime}";
weather.Timestamp = timestamp ?? _timeUtil.GetTimeStamp(); // matches weather.date
@@ -105,8 +105,8 @@ public class InsuranceService(
var systemData = new SystemData
{
Date = _timeUtil.GetDateMailFormat(),
Time = _timeUtil.GetTimeMailFormat(),
Date = _timeUtil.GetBsgDateMailFormat(),
Time = _timeUtil.GetBsgTimeMailFormat(),
Location = mapId,
};
@@ -1,4 +1,5 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
namespace SPTarkov.Server.Core.Utils;
@@ -7,41 +8,13 @@ public class TimeUtil
{
public const int OneHourAsSeconds = 3600;
/// <summary>
/// Formats the time part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted time as 'HH-MM-SS'.</returns>
public string FormatTime(DateTimeOffset dateTime)
{
var hour = Pad(dateTime.ToUniversalTime().Hour);
var minute = Pad(dateTime.ToUniversalTime().Minute);
var second = Pad(dateTime.ToUniversalTime().Second);
return $"{hour}-{minute}-{second}";
}
/// <summary>
/// Formats the date part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted date as 'YYYY-MM-DD'.</returns>
public string FormatDate(DateTimeOffset dateTime)
{
var day = Pad(dateTime.ToUniversalTime().Day);
var month = Pad(dateTime.ToUniversalTime().Month);
var year = Pad(dateTime.ToUniversalTime().Year);
return $"{year}-{month}-{day}";
}
/// <summary>
/// Gets the current date as a formatted UTC string.
/// </summary>
/// <returns>The current date as 'YYYY-MM-DD'.</returns>
public string GetDate()
{
return FormatDate(DateTimeOffset.UtcNow);
return DateTimeOffset.UtcNow.FormatToBsgDate();
}
public DateTime GetDateTimeNow()
@@ -55,7 +28,7 @@ public class TimeUtil
/// <returns>The current time as 'HH-MM-SS'.</returns>
public string GetTime()
{
return FormatTime(DateTimeOffset.UtcNow);
return DateTimeOffset.UtcNow.FormatToBsgTime();
}
/// <summary>
@@ -107,7 +80,7 @@ public class TimeUtil
/// </summary>
/// <returns>The current time as 'HH:MM' in UTC.</returns>
/// GetTimeMailFormat
public string GetTimeMailFormat()
public string GetBsgTimeMailFormat()
{
return DateTimeOffset.UtcNow.ToString("HH:mm");
}
@@ -116,7 +89,7 @@ public class TimeUtil
/// Gets the current date in UTC in a format suitable for emails in EFT.
/// </summary>
/// <returns>The current date as 'DD.MM.YYYY' in UTC.</returns>
public string GetDateMailFormat()
public string GetBsgDateMailFormat()
{
return DateTimeOffset.UtcNow.ToString("dd.MM.yyyy");
}
@@ -171,16 +144,6 @@ public class TimeUtil
return ((DateTimeOffset)lastFullHour).ToUnixTimeSeconds();
}
/// <summary>
/// Pads a number with a leading zero if it is less than 10.
/// </summary>
/// <param name="number">The number to pad.</param>
/// <returns>The padded number as a string.</returns>
private static string Pad(int number)
{
return number.ToString().PadLeft(2, '0');
}
/// <summary>
/// Takes a timestamp and converts to its date with Epoch
/// </summary>