Skip to content

Commit

Permalink
Implements new intand long overloads for TimeSpan
Browse files Browse the repository at this point in the history
  • Loading branch information
tcortega committed Oct 28, 2023
1 parent e307926 commit c78cde4
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
96 changes: 96 additions & 0 deletions src/libraries/System.Private.CoreLib/src/System/TimeSpan.cs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,23 @@ public static TimeSpan FromDays(double value)
return Interval(value, TicksPerDay);
}

public static TimeSpan FromDays(int days)
{
return Interval(days, TicksPerDay);
}

public static TimeSpan FromDays(int days, int hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0)
{
long totalTicks = (long)days * TicksPerDay
+ (long)hours * TicksPerHour
+ minutes * TicksPerMinute
+ seconds * TicksPerSecond
+ milliseconds * TicksPerMillisecond
+ microseconds * TicksPerMicrosecond;

return IntervalFromLongTicks(totalTicks);
}

public TimeSpan Duration()
{
if (Ticks == MinValue.Ticks)
Expand Down Expand Up @@ -307,13 +324,34 @@ public static TimeSpan FromHours(double value)
return Interval(value, TicksPerHour);
}

public static TimeSpan FromHours(int hours)
{
return Interval(hours, TicksPerHour);
}

public static TimeSpan FromHours(int hours, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0)
{
long totalTicks = (long)hours * TicksPerHour
+ minutes * TicksPerMinute
+ seconds * TicksPerSecond
+ milliseconds * TicksPerMillisecond
+ microseconds * TicksPerMicrosecond;

return IntervalFromLongTicks(totalTicks);
}

private static TimeSpan Interval(double value, double scale)
{
if (double.IsNaN(value))
ThrowHelper.ThrowArgumentException_Arg_CannotBeNaN();
return IntervalFromDoubleTicks(value * scale);
}

private static TimeSpan Interval(long value, long scale)
{
return IntervalFromLongTicks(value * scale);
}

private static TimeSpan IntervalFromDoubleTicks(double ticks)
{
if ((ticks > long.MaxValue) || (ticks < long.MinValue) || double.IsNaN(ticks))
Expand All @@ -323,11 +361,35 @@ private static TimeSpan IntervalFromDoubleTicks(double ticks)
return new TimeSpan((long)ticks);
}

private static TimeSpan IntervalFromLongTicks(long ticks)
{
if (ticks == long.MaxValue)
return MaxValue;

if (ticks == long.MinValue)
return MinValue;

return new TimeSpan(ticks);
}

public static TimeSpan FromMilliseconds(double value)
{
return Interval(value, TicksPerMillisecond);
}

public static TimeSpan FromMilliseconds(long milliseconds)
{
return Interval(milliseconds, TicksPerMillisecond);
}

public static TimeSpan FromMilliseconds(long milliseconds, long microseconds = 0)
{
long totalTicks = milliseconds * TicksPerMillisecond
+ microseconds * TicksPerMicrosecond;

return IntervalFromLongTicks(totalTicks);
}

/// <summary>
/// Returns a <see cref="TimeSpan"/> that represents a specified number of microseconds.
/// </summary>
Expand All @@ -353,11 +415,31 @@ public static TimeSpan FromMicroseconds(double value)
return Interval(value, TicksPerMicrosecond);
}

public static TimeSpan FromMicroseconds(long microseconds)
{
return Interval(microseconds, TicksPerMicrosecond);
}

public static TimeSpan FromMinutes(double value)
{
return Interval(value, TicksPerMinute);
}

public static TimeSpan FromMinutes(long minutes)
{
return Interval(value, TicksPerMinute);
}

public static TimeSpan FromMinutes(long minutes, long seconds = 0, long milliseconds = 0, long microseconds = 0)
{
long totalTicks = minutes * TicksPerMinute
+ seconds * TicksPerSecond
+ milliseconds * TicksPerMillisecond
+ microseconds * TicksPerMicrosecond;

return IntervalFromLongTicks(totalTicks);
}

public TimeSpan Negate()
{
if (Ticks == MinValue.Ticks)
Expand All @@ -370,6 +452,20 @@ public static TimeSpan FromSeconds(double value)
return Interval(value, TicksPerSecond);
}

public static TimeSpan FromSeconds(long seconds)
{
return Interval(seconds, TicksPerSecond);
}

public static TimeSpan FromSeconds(long seconds, long milliseconds = 0, long microseconds = 0)
{
long totalTicks = seconds * TicksPerSecond
+ milliseconds * TicksPerMillisecond
+ microseconds * TicksPerMicrosecond;

return IntervalFromLongTicks(totalTicks);
}

public TimeSpan Subtract(TimeSpan ts)
{
long result = _ticks - ts._ticks;
Expand Down
11 changes: 11 additions & 0 deletions src/libraries/System.Runtime/ref/System.Runtime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5603,6 +5603,17 @@ public partial class TimeoutException : System.SystemException
public static System.TimeSpan FromMilliseconds(double value) { throw null; }
public static System.TimeSpan FromMinutes(double value) { throw null; }
public static System.TimeSpan FromSeconds(double value) { throw null; }
public static System.TimeSpan FromDays(int days) { throw null; }
public static System.TimeSpan FromDays(int days, int hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0) { throw null; }
public static System.TimeSpan FromHours(int hours) { throw null; }
public static System.TimeSpan FromHours(int hours, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0) { throw null; }
public static System.TimeSpan FromMinutes(long minutes) { throw null; }
public static System.TimeSpan FromMinutes(long minutes, long seconds = 0, long milliseconds = 0, long microseconds = 0) { throw null; }
public static System.TimeSpan FromSeconds(long seconds) { throw null; }
public static System.TimeSpan FromSeconds(long seconds, long milliseconds = 0, long microseconds = 0) { throw null; }
public static System.TimeSpan FromMilliseconds(long milliseconds) { throw null; }
public static System.TimeSpan FromMilliseconds(long milliseconds, long microseconds = 0) { throw null; }
public static System.TimeSpan FromMicroseconds(long microseconds) { throw null; }
public static System.TimeSpan FromTicks(long value) { throw null; }
public override int GetHashCode() { throw null; }
public System.TimeSpan Multiply(double factor) { throw null; }
Expand Down

0 comments on commit c78cde4

Please sign in to comment.