namespace MeterVault.Core.Tests.Analysis;
/// Fixed instants in the zones the interval and coverage tests reason about.
internal static class AnalysisTestTime
{
public static readonly TimeZoneInfo Berlin = TimeZoneInfo.FindSystemTimeZoneById("Europe/Berlin");
public static readonly TimeZoneInfo NewYork = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
/// A wall-clock time in as an instant.
public static DateTimeOffset Local(TimeZoneInfo zone, int year, int month, int day, int hour = 0, int minute = 0, int second = 0)
{
var wall = new DateTime(year, month, day, hour, minute, second);
return new DateTimeOffset(wall, zone.GetUtcOffset(wall));
}
public static DateTimeOffset InBerlin(int year, int month, int day, int hour = 0, int minute = 0, int second = 0) =>
Local(Berlin, year, month, day, hour, minute, second);
public static DateTimeOffset Utc(int year, int month, int day, int hour = 0, int minute = 0) =>
new(year, month, day, hour, minute, 0, TimeSpan.Zero);
/// The local calendar date an instant falls on.
public static DateOnly LocalDate(DateTimeOffset instant, TimeZoneInfo zone) =>
DateOnly.FromDateTime(TimeZoneInfo.ConvertTime(instant, zone).DateTime);
}