60 lines
2.9 KiB
C#
60 lines
2.9 KiB
C#
using System;
|
|
|
|
namespace DTS.Common.Utilities
|
|
{
|
|
/// <summary>
|
|
/// Public utilty class for manipulating Unix timestamps
|
|
/// Primarily exposed for the SDK
|
|
/// </summary>
|
|
public class PTP1588Timestamps
|
|
{
|
|
private const int MIN_VALID_TIMESTAMP_YEAR = 1990;
|
|
/// <summary>
|
|
/// tests time in seconds since 1,1,1970 to (unix time) to see whether the time should be valid or not
|
|
/// this is used by TestMetaDataList to control whether to show unix time or not for a dataset in a viewer
|
|
/// now it's also used by the CSV export to eliminate timestamps that occur before 1990
|
|
/// this was done because of a dataset in http://manuscript.dts.local/f/cases/33199/
|
|
/// which contained an invalid timestamp
|
|
/// </summary>
|
|
/// <param name="unixTimeStampSeconds">time in seconds since 1970-1-1</param>
|
|
/// <returns>true if the value is valid or not</returns>
|
|
public static bool IsValidTimeStamp(double unixTimeStampSeconds)
|
|
{
|
|
return UnixTimeStampToDateTimeLocal(unixTimeStampSeconds).Year > MIN_VALID_TIMESTAMP_YEAR;
|
|
}
|
|
/// <summary>
|
|
/// Returns DateTime object from Unix timestamp in seconds
|
|
/// </summary>
|
|
/// <param name="unixTimeStampSec"></param>
|
|
/// <returns></returns>
|
|
public static DateTime UnixTimeStampToDateTimeLocal(double unixTimeStampSec)
|
|
{
|
|
return UnixTimeStampToDateTimeLocal((decimal)unixTimeStampSec);
|
|
}
|
|
public static DateTime UnixTimeStampToDateTimeLocal(decimal unixTimeStampSec)
|
|
{
|
|
return UnitTimeStampToDateTimeLocal(unixTimeStampSec, (decimal)0);
|
|
}
|
|
public static DateTime UnitTimeStampToDateTimeLocal(double unixTimeStampSec, double ns)
|
|
{
|
|
var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
|
dtDateTime = dtDateTime.AddSeconds(unixTimeStampSec).AddTicks(Convert.ToInt64(ns / 100));
|
|
return dtDateTime.ToLocalTime();
|
|
}
|
|
public static DateTime UnitTimeStampToDateTimeLocal(decimal unixTimeStampSec, decimal ns)
|
|
{
|
|
var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
|
dtDateTime = dtDateTime.AddSeconds(Convert.ToDouble(unixTimeStampSec)).AddTicks(Convert.ToInt64(ns / 100));
|
|
return dtDateTime.ToLocalTime();
|
|
}
|
|
/// <summary>
|
|
/// String representation in Unix timestamp is seconds past epoch
|
|
/// </summary>
|
|
public static string ToDateTimeString(double unixTimeStampSec, double ns) =>
|
|
ToDateTimeString((decimal)unixTimeStampSec, (decimal)ns);
|
|
|
|
public static string ToDateTimeString(decimal unixTimeStampSec, decimal ns) =>
|
|
$"{UnixTimeStampToDateTimeLocal(unixTimeStampSec).ToUniversalTime():yyyy/MM/dd HH:mm:ss}:{ns,9:000000000}";
|
|
}
|
|
}
|