61 lines
2.1 KiB
C#
61 lines
2.1 KiB
C#
namespace QWERTYkez.Mensura.Units;
|
|
|
|
/// <summary>
|
|
/// Base value is MilliSeconds
|
|
/// </summary>
|
|
[UnitGenerator, DebuggerDisplay("ms = {_MilliSeconds.ToString(\"0.###\")}, s = {Seconds.ToString(\"0.###\")}")]
|
|
public readonly partial record struct Time
|
|
{
|
|
public static Time _MilliSecond { get; } = new() { _MilliSeconds = 1 };
|
|
[NotMapped, JsonIgnore] public double _MilliSeconds { get => _Value; init => _Value = value; }
|
|
|
|
|
|
public static Time Second { get; } = new() { Seconds = 1 };
|
|
[NotMapped, JsonIgnore] public double Seconds
|
|
{
|
|
get => TimeConv.Seconds.From(_Value);
|
|
init
|
|
{
|
|
_Value = TimeConv.Seconds.To(value);
|
|
}
|
|
}
|
|
|
|
public static Time Minute { get; } = new() { Minutes = 1 };
|
|
[NotMapped, JsonIgnore] public double Minutes
|
|
{
|
|
get => TimeConv.Minutes.From(_Value);
|
|
init
|
|
{
|
|
_Value = TimeConv.Minutes.To(value);
|
|
}
|
|
}
|
|
|
|
public static Time Hour { get; } = new() { Hours = 1 };
|
|
[NotMapped, JsonIgnore] public double Hours
|
|
{
|
|
get => TimeConv.Hours.From(_Value);
|
|
init
|
|
{
|
|
_Value = TimeConv.Hours.To(value);
|
|
}
|
|
}
|
|
|
|
public Frequency ToFrequency() => new() { _Hertz = 1 / Seconds };
|
|
|
|
public Time AddMilliSeconds(double value) => new(_Value + value);
|
|
public Time AddSeconds(double value) => new(_Value + TimeConv.Seconds.To(value));
|
|
public Time AddMinutes(double value) => new(_Value + TimeConv.Minutes.To(value));
|
|
public Time AddHours(double value) => new(_Value + TimeConv.Hours.To(value));
|
|
}
|
|
|
|
internal readonly struct TimeConv
|
|
{
|
|
private TimeConv(double multiplicator) => this.Multiplicator = multiplicator;
|
|
public double To(double value) => value * Multiplicator;
|
|
public double From(double value) => value / Multiplicator;
|
|
public double Multiplicator { get; init; }
|
|
public static TimeConv MilliSeconds { get; } = new(1);
|
|
public static TimeConv Seconds { get; } = new(1000);
|
|
public static TimeConv Minutes { get; } = new(60000);
|
|
public static TimeConv Hours { get; } = new(3600000);
|
|
} |