50 lines
1.1 KiB
C#
50 lines
1.1 KiB
C#
|
using System.Text;
|
||
|
|
||
|
namespace InnovEnergy.Time.Unix;
|
||
|
|
||
|
public readonly partial struct UnixTimeSpan
|
||
|
{
|
||
|
public override String ToString()
|
||
|
{
|
||
|
var sb = new StringBuilder();
|
||
|
var dt = ToTimeSpan();
|
||
|
|
||
|
var weeks = dt.Days / 7;
|
||
|
var days = dt.Days % 7;
|
||
|
|
||
|
if (weeks > 0)
|
||
|
{
|
||
|
sb.Append(weeks);
|
||
|
sb.Append("w ");
|
||
|
}
|
||
|
if (days > 0)
|
||
|
{
|
||
|
sb.Append(days);
|
||
|
sb.Append("d ");
|
||
|
}
|
||
|
if (dt.Hours > 0)
|
||
|
{
|
||
|
sb.Append(dt.Hours);
|
||
|
sb.Append("h ");
|
||
|
}
|
||
|
if (dt.Minutes > 0)
|
||
|
{
|
||
|
sb.Append(dt.Minutes);
|
||
|
sb.Append("m ");
|
||
|
}
|
||
|
if (dt.Seconds > 0)
|
||
|
{
|
||
|
sb.Append(dt.Seconds);
|
||
|
sb.Append("s");
|
||
|
}
|
||
|
|
||
|
return sb.ToString().Trim();
|
||
|
}
|
||
|
|
||
|
public override Boolean Equals(Object? obj) => obj is UnixTime other && Ticks == other.Ticks;
|
||
|
|
||
|
public override Int32 GetHashCode() => (Int32) (Ticks & 0x7F_FF_FF_FF);
|
||
|
|
||
|
public static UnixTimeSpan Forever { get; } = FromTicks(UInt32.MaxValue) / 1.Weeks() * 1.Weeks();
|
||
|
|
||
|
}
|