Unix time is the time value used in Unix based operating systems and is often exposed by Unix based APIs. To convert it to, or from, a .NET System.DateTime simply calculate the number of seconds since the Unix Epoch, midnight on the 1st January 1970. I’ve created a little class you can use to do just that. Note that the Unix Epoch is UTC, so you should always convert your local time to UTC before doing the calculation.
publicclass UnixTime
{
privatestaticreadonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
publicstaticlong FromDateTime(DateTime dateTime)
{
if (dateTime.Kind == DateTimeKind.Utc)
{
return (long)dateTime.Subtract(epoch).TotalSeconds;
}
thrownew ArgumentException("Input DateTime must be UTC");
}
publicstatic DateTime ToDateTime(long unixTime)
{
return epoch.AddSeconds(unixTime);
}
publicstaticlong Now
{
get
{
return FromDateTime(DateTime.UtcNow);
}
}
}
You can convert from Unix time to a UTC DateTime like this:
var calculatedCurrentTime = UnixTime.ToDateTime(currentUnixTime);
Convert to Unix time from a UTC DateTime like this:
var calculatedUnixTime = UnixTime.FromDateTime(myDateTimeValue);
And get the current time as a UTC time value like this:
Console.Out.WriteLine(UnixTime.Now);
As an interesting aside, the 32 bit signed integer used in older Unix systems will overflow at 14 minutes past 3 o’clock and 7 seconds on the morning of 19th January 2038 and interpret the date as 1901. I shall come out of retirement and spend happy well paid hours as a ‘unix time consultant’. 64 bit systems will overflow in the year 292,277,026,596.