Skip to content

Commit

Permalink
added extension method overloads for DateTimeOffset
Browse files Browse the repository at this point in the history
  • Loading branch information
Malachi Griffie committed May 25, 2017
1 parent 2ff7132 commit 3a074e4
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 10 deletions.
100 changes: 92 additions & 8 deletions src/nexus.core/time/DateTimeUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
namespace nexus.core.time
{
/// <summary>
/// Extension and utility methods for <see cref="DateTime"/> and similar
/// Extension and utility methods for <see cref="DateTime" /> and similar
/// </summary>
public static class DateTimeUtils
{
Expand All @@ -20,15 +20,35 @@ public static class DateTimeUtils
/// <param name="includeDelimeters"><c>true</c> to include '-', ':' and '.' in output</param>
public static String ToIso8601String( this DateTime time, Boolean includeDelimeters = false )
{
return time.ToString( includeDelimeters ? "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK" : "yyyyMMdd'T'HHmmssfffK" );
return time.ToUniversalTime().ToString(
includeDelimeters ? "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK" : "yyyyMMdd'T'HHmmssfffK" );
}

/// <summary>
/// yyyy-MM-ddTHH:mm:ss.fffK
/// </summary>
/// <param name="time"></param>
/// <param name="includeDelimeters"><c>true</c> to include '-', ':' and '.' in output</param>
public static String ToIso8601String( this DateTimeOffset time, Boolean includeDelimeters = false )
{
return ToIso8601String( time.UtcDateTime );
}

/// <summary>
/// Total seconds elapsed since January 1, 1970 UTC
/// </summary>
public static Double ToUnixTimestamp( this DateTime dateTime )
{
return Math.Floor( dateTime.ToUniversalTime().Subtract( TimeEpoch.UnixEpoch.EpochStart ).TotalSeconds );
return Math.Floor(
dateTime.ToUniversalTime().Subtract( TimeEpoch.UnixEpoch.EpochStart.UtcDateTime ).TotalSeconds );
}

/// <summary>
/// Total seconds elapsed since January 1, 1970 UTC
/// </summary>
public static Double ToUnixTimestamp( this DateTimeOffset dateTime )
{
return Math.Floor( dateTime.Subtract( TimeEpoch.UnixEpoch.EpochStart ).TotalSeconds );
}

/// <summary>
Expand All @@ -39,6 +59,14 @@ public static Double ToUnixTimestamp( this DateTime? dateTime )
return dateTime != null ? ToUnixTimestamp( dateTime.Value ) : 0;
}

/// <summary>
/// Total seconds elapsed since January 1, 1970 UTC
/// </summary>
public static Double ToUnixTimestamp( this DateTimeOffset? dateTime )
{
return dateTime != null ? ToUnixTimestamp( dateTime.Value ) : 0;
}

/// <summary>
/// Total milliseconds elapsed since January 1, 1970 UTC
/// </summary>
Expand All @@ -47,27 +75,59 @@ public static Int64 ToUnixTimestampInMilliseconds( this DateTime? dateTime )
return dateTime != null ? ToUnixTimestampInMilliseconds( dateTime.Value ) : 0;
}

/// <summary>
/// Total milliseconds elapsed since January 1, 1970 UTC
/// </summary>
public static Int64 ToUnixTimestampInMilliseconds( this DateTimeOffset? dateTime )
{
return dateTime != null ? ToUnixTimestampInMilliseconds( dateTime.Value ) : 0;
}

/// <summary>
/// Total milliseconds elapsed since January 1, 1970 UTC
/// </summary>
public static Int64 ToUnixTimestampInMilliseconds( this DateTime dateTime )
{
return
(Int64)Math.Floor( dateTime.ToUniversalTime().Subtract( TimeEpoch.UnixEpoch.EpochStart ).TotalMilliseconds );
return (Int64)Math.Floor(
dateTime.ToUniversalTime().Subtract( TimeEpoch.UnixEpoch.EpochStart.UtcDateTime ).TotalMilliseconds );
}

/// <summary>
/// Total milliseconds elapsed since January 1, 1970 UTC
/// </summary>
public static Int64 ToUnixTimestampInMilliseconds( this DateTimeOffset dateTime )
{
return (Int64)Math.Floor( dateTime.Subtract( TimeEpoch.UnixEpoch.EpochStart ).TotalMilliseconds );
}

/// <summary>
/// Convert milliseconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTime UnixTimestampInMillisecondsToDateTime( this Int64 millisecondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddMilliseconds( millisecondsSinceEpoch );
return UnixTimestampInMillisecondsToDateTimeOffset( millisecondsSinceEpoch ).UtcDateTime;
}

/// <summary>
/// Convert milliseconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTime UnixTimestampInMillisecondsToDateTime( this Double millisecondsSinceEpoch )
{
return UnixTimestampInMillisecondsToDateTimeOffset( millisecondsSinceEpoch ).UtcDateTime;
}

/// <summary>
/// Convert milliseconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTimeOffset UnixTimestampInMillisecondsToDateTimeOffset( this Int64 millisecondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddMilliseconds( millisecondsSinceEpoch );
}

/// <summary>
/// Convert milliseconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTimeOffset UnixTimestampInMillisecondsToDateTimeOffset( this Double millisecondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddMilliseconds( millisecondsSinceEpoch );
}
Expand All @@ -77,21 +137,45 @@ public static DateTime UnixTimestampInMillisecondsToDateTime( this Double millis
/// </summary>
public static DateTime UnixTimestampToDateTime( this Int64 secondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddSeconds( secondsSinceEpoch );
return UnixTimestampToDateTimeOffset( secondsSinceEpoch ).UtcDateTime;
}

/// <summary>
/// Convert seconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTime UnixTimestampToDateTime( this Int32 secondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddSeconds( secondsSinceEpoch );
return UnixTimestampToDateTimeOffset( secondsSinceEpoch ).UtcDateTime;
}

/// <summary>
/// Convert seconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTime UnixTimestampToDateTime( this Double secondsSinceEpoch )
{
return UnixTimestampToDateTimeOffset( secondsSinceEpoch ).UtcDateTime;
}

/// <summary>
/// Convert seconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTimeOffset UnixTimestampToDateTimeOffset( this Int64 secondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddSeconds( secondsSinceEpoch );
}

/// <summary>
/// Convert seconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTimeOffset UnixTimestampToDateTimeOffset( this Int32 secondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddSeconds( secondsSinceEpoch );
}

/// <summary>
/// Convert seconds elapsed since January 1, 1970 UTC into a <see cref="DateTime" />
/// </summary>
public static DateTimeOffset UnixTimestampToDateTimeOffset( this Double secondsSinceEpoch )
{
return TimeEpoch.UnixEpoch.EpochStart.AddSeconds( secondsSinceEpoch );
}
Expand Down
4 changes: 2 additions & 2 deletions src/nexus.core/time/TimeEpoch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public sealed class TimeEpoch
{
/// <summary>
/// </summary>
public TimeEpoch( DateTime epochStart, String epochName )
public TimeEpoch( DateTimeOffset epochStart, String epochName )
{
EpochStart = epochStart;
EpochName = epochName;
Expand All @@ -29,7 +29,7 @@ public TimeEpoch( DateTime epochStart, String epochName )
/// <summary>
/// The point in time when this epoch starts
/// </summary>
public DateTime EpochStart { get; }
public DateTimeOffset EpochStart { get; }

/// <summary>
/// Epoch representing no value, starts at <see cref="DateTime.MinValue" />
Expand Down

0 comments on commit 3a074e4

Please sign in to comment.