-
Notifications
You must be signed in to change notification settings - Fork 7
/
Epoch.cs
61 lines (51 loc) · 1.53 KB
/
Epoch.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#region License
// Copyright 2012 Andrius Bentkus
// without provided license assumed public without limitations
// source: https://gist.github.com/txdv/1095252
#endregion
using System;
namespace Epoch
{
public class Epoch
{
static readonly DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0);
static readonly DateTimeOffset epochDateTimeOffset = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
public static DateTime FromUnix(int secondsSinceepoch)
{
return epochStart.AddSeconds(secondsSinceepoch);
}
public static DateTimeOffset FromUnix(int secondsSinceEpoch, int timeZoneOffsetInMinutes)
{
var utcDateTime = epochDateTimeOffset.AddSeconds(secondsSinceEpoch);
var offset = TimeSpan.FromMinutes(timeZoneOffsetInMinutes);
return new DateTimeOffset(utcDateTime.DateTime.Add(offset), offset);
}
public static int ToUnix(DateTime dateTime)
{
return (int)(dateTime - epochStart).TotalSeconds;
}
public static int Now {
get {
return (int)(DateTime.UtcNow - epochStart).TotalSeconds;
}
}
}
namespace Extensions
{
public static class EpochExtensions
{
public static int ToUnix(this DateTime dateTime)
{
return Epoch.ToUnix(dateTime);
}
public static DateTime FromUnix(this int secondsSinceEpoch)
{
return Epoch.FromUnix(secondsSinceEpoch);
}
public static DateTimeOffset FromUnix(this int secondsSinceEpoch, int timeZoneOffsetInMinutes)
{
return Epoch.FromUnix(secondsSinceEpoch, timeZoneOffsetInMinutes);
}
}
}
}