How can I convert a Unix timestamp to DateTime and vice versa?
up vote
625
down vote
favorite
There is this example code, but then it starts talking about millisecond / nanosecond problems.
The same question is on MSDN, Seconds since the Unix epoch in C#.
This is what I've got so far:
public Double CreatedEpoch
get
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
set
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
c# datetime unix epoch data-conversion
add a comment |
up vote
625
down vote
favorite
There is this example code, but then it starts talking about millisecond / nanosecond problems.
The same question is on MSDN, Seconds since the Unix epoch in C#.
This is what I've got so far:
public Double CreatedEpoch
get
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
set
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
c# datetime unix epoch data-conversion
77
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. SeeDateTimeOffset.FromUnixTimeSeconds
andDateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.
– Jeppe Stig Nielsen
May 5 '15 at 9:29
add a comment |
up vote
625
down vote
favorite
up vote
625
down vote
favorite
There is this example code, but then it starts talking about millisecond / nanosecond problems.
The same question is on MSDN, Seconds since the Unix epoch in C#.
This is what I've got so far:
public Double CreatedEpoch
get
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
set
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
c# datetime unix epoch data-conversion
There is this example code, but then it starts talking about millisecond / nanosecond problems.
The same question is on MSDN, Seconds since the Unix epoch in C#.
This is what I've got so far:
public Double CreatedEpoch
get
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
set
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
c# datetime unix epoch data-conversion
c# datetime unix epoch data-conversion
edited Jan 15 at 20:36
Peter Mortensen
13.3k1983111
13.3k1983111
asked Oct 30 '08 at 10:30
Mark Ingram
42.4k44149211
42.4k44149211
77
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. SeeDateTimeOffset.FromUnixTimeSeconds
andDateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.
– Jeppe Stig Nielsen
May 5 '15 at 9:29
add a comment |
77
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. SeeDateTimeOffset.FromUnixTimeSeconds
andDateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.
– Jeppe Stig Nielsen
May 5 '15 at 9:29
77
77
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. See
DateTimeOffset.FromUnixTimeSeconds
and DateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.– Jeppe Stig Nielsen
May 5 '15 at 9:29
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. See
DateTimeOffset.FromUnixTimeSeconds
and DateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.– Jeppe Stig Nielsen
May 5 '15 at 9:29
add a comment |
15 Answers
15
active
oldest
votes
up vote
855
down vote
accepted
Here's what you need:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
Or, for Java (which is different because the timestamp is in milliseconds, not seconds):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just dodtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
For the .NET Framework 4.6 and above there is nowstatic DateTimeOffset.FromUnixMilliseconds
andDateTimeOffset.ToUnixMilliseconds
.
– rookie1024
May 18 '16 at 2:49
|
show 7 more comments
up vote
287
down vote
The latest version of .NET (v4.6) has added built-in support for Unix time conversions. That includes both to and from Unix time represented by either seconds or milliseconds.
- Unix time in seconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset
to Unix time in seconds:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
- Unix time in milliseconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset
to Unix time in milliseconds:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Note: These methods convert to and from a UTC DateTimeOffset
. To get a DateTime
representation simply use the DateTimeOffset.UtcDateTime
or DateTimeOffset.LocalDateTime
properties:
DateTime dateTime = dateTimeOffset.UtcDateTime;
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
@BerenddeBoer You can useToLocalTime
if you want.
– i3arnon
Aug 28 '17 at 17:11
add a comment |
up vote
207
down vote
DateTime to UNIX timestamp:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
add a comment |
up vote
44
down vote
"UTC does not change with a change of seasons, but local time or civil time may change if a time zone jurisdiction observes daylight saving time (summer time). For example, UTC is 5 hours ahead of (that is, later in the day than) local time on the east coast of the United States during winter, but 4 hours ahead while daylight saving is observed there."
So this is my code:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
add a comment |
up vote
18
down vote
Be careful, if you need precision higher than milliseconds!
.NET (v4.6) methods (e.g. FromUnixTimeMilliseconds) don't provide this precision.
AddSeconds and AddMilliseconds also cut off the microseconds in the double.
These versions have high precision:
Unix -> DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
DateTime -> Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in yourUnixTimestampToDateTime
, the suppliedunixTime
is still in seconds, right?
– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
add a comment |
up vote
12
down vote
See IdentityModel.EpochTimeExtensions
public static class EpochTimeExtensions
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTime dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTimeOffset dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given epoch time to a <see cref="DateTime"/> with <see cref="DateTimeKind.Utc"/> kind.
/// </summary>
public static DateTime ToDateTimeFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
/// <summary>
/// Converts the given epoch time to a UTC <see cref="DateTimeOffset"/>.
/// </summary>
public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
add a comment |
up vote
10
down vote
To supplement ScottCher's answer, I recently found myself in the annoying scenario of having both seconds and milliseconds UNIX timestamps arbitrarily mixed together in an input data set. The following code seems to handle this well:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
add a comment |
up vote
6
down vote
Unix time conversion is new in .NET Framework 4.6.
You can now more easily convert date and time values to or from .NET Framework types and Unix time. This can be necessary, for example, when converting time values between a JavaScript client and .NET server. The following APIs have been added to the DateTimeOffset structure:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
add a comment |
up vote
4
down vote
I found the right answer just by comparing the conversion to 1/1/1970 w/o the local time adjustment;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
add a comment |
up vote
3
down vote
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Of course, one can make unixEpoch
a global static, so it only needs to appear once in your project, and one can use AddSeconds
if the UNIX time is in seconds.
To go the other way:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Truncate to Int64 and/or use TotalSeconds
as needed.
add a comment |
up vote
2
down vote
A Unix tick is 1 second (if I remember well), and a .NET tick is 100 nanoseconds.
If you've been encountering problems with nanoseconds, you might want to try using AddTick(10000000 * value).
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
add a comment |
up vote
1
down vote
I needed to convert a timeval struct (seconds, microseconds) containing UNIX time
to DateTime
without losing precision and haven't found an answer here so I thought I just might add mine:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
return _epochTime.AddTicks(
unixTime.Seconds * TimeSpan.TicksPerSecond +
unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
add a comment |
up vote
0
down vote
public static class UnixTime
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static DateTime UnixTimeToDateTime(double unixTimeStamp)
return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
you can call UnixTime.UnixTimeToDateTime(double datetime))
add a comment |
up vote
0
down vote
var dt = DateTime.Now;
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
// 1510396991
var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);
// [11.11.2017 10:43:11 +00:00]
add a comment |
up vote
-2
down vote
For .NET 4.6 and later:
public static class UnixDateTime
public static DateTimeOffset FromUnixTimeSeconds(long seconds)
public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
if (milliseconds < -62135596800000L
public static long ToUnixTimeSeconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000000L - 62135596800L;
public static long ToUnixTimeMilliseconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000L - 62135596800000L;
[Test]
public void UnixSeconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInSeconds = utcNowOffset.ToUnixTimeSeconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeSeconds(unixTimestampInSeconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
[Test]
public void UnixMilliseconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInMilliseconds = utcNowOffset.ToUnixTimeMilliseconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeMilliseconds(unixTimestampInMilliseconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
Assert.AreEqual(utcNowOffset.Millisecond, utcNowOffsetTest.Millisecond);
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
add a comment |
protected by i3arnon Nov 27 '14 at 7:44
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
15 Answers
15
active
oldest
votes
15 Answers
15
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
855
down vote
accepted
Here's what you need:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
Or, for Java (which is different because the timestamp is in milliseconds, not seconds):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just dodtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
For the .NET Framework 4.6 and above there is nowstatic DateTimeOffset.FromUnixMilliseconds
andDateTimeOffset.ToUnixMilliseconds
.
– rookie1024
May 18 '16 at 2:49
|
show 7 more comments
up vote
855
down vote
accepted
Here's what you need:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
Or, for Java (which is different because the timestamp is in milliseconds, not seconds):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just dodtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
For the .NET Framework 4.6 and above there is nowstatic DateTimeOffset.FromUnixMilliseconds
andDateTimeOffset.ToUnixMilliseconds
.
– rookie1024
May 18 '16 at 2:49
|
show 7 more comments
up vote
855
down vote
accepted
up vote
855
down vote
accepted
Here's what you need:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
Or, for Java (which is different because the timestamp is in milliseconds, not seconds):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
Here's what you need:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
// Unix timestamp is seconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
return dtDateTime;
Or, for Java (which is different because the timestamp is in milliseconds, not seconds):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
// Java timestamp is milliseconds past epoch
System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dtDateTime;
edited Jul 25 '17 at 11:12
K48
5,27183988
5,27183988
answered Oct 30 '08 at 14:42
ScottCher
10.4k52225
10.4k52225
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just dodtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
For the .NET Framework 4.6 and above there is nowstatic DateTimeOffset.FromUnixMilliseconds
andDateTimeOffset.ToUnixMilliseconds
.
– rookie1024
May 18 '16 at 2:49
|
show 7 more comments
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just dodtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
For the .NET Framework 4.6 and above there is nowstatic DateTimeOffset.FromUnixMilliseconds
andDateTimeOffset.ToUnixMilliseconds
.
– rookie1024
May 18 '16 at 2:49
4
4
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
Time in Windows is handled by HAL and only close-to-accurate within 1ms to 15ms. More info is available in Windows Internals around page 112, if anyone is interested.
– Jim Schubert
Apr 13 '12 at 14:59
12
12
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
This answer risks truncating the seconds... A double is a floating number. The argument should be int/long/etc.
– ccook
Mar 4 '13 at 14:59
35
35
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just do
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
These methods should accept a long or int, not a double. Also, for the Java time stamps, there is no need to divide by 1000 and round. Just do
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
– Justin Johnson
Feb 21 '14 at 21:20
11
11
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
Did you just miss the "vice versa"? How do we convert a DateTime to a timestamp?
– Jonny
Dec 8 '14 at 8:31
20
20
For the .NET Framework 4.6 and above there is now
static DateTimeOffset.FromUnixMilliseconds
and DateTimeOffset.ToUnixMilliseconds
.– rookie1024
May 18 '16 at 2:49
For the .NET Framework 4.6 and above there is now
static DateTimeOffset.FromUnixMilliseconds
and DateTimeOffset.ToUnixMilliseconds
.– rookie1024
May 18 '16 at 2:49
|
show 7 more comments
up vote
287
down vote
The latest version of .NET (v4.6) has added built-in support for Unix time conversions. That includes both to and from Unix time represented by either seconds or milliseconds.
- Unix time in seconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset
to Unix time in seconds:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
- Unix time in milliseconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset
to Unix time in milliseconds:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Note: These methods convert to and from a UTC DateTimeOffset
. To get a DateTime
representation simply use the DateTimeOffset.UtcDateTime
or DateTimeOffset.LocalDateTime
properties:
DateTime dateTime = dateTimeOffset.UtcDateTime;
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
@BerenddeBoer You can useToLocalTime
if you want.
– i3arnon
Aug 28 '17 at 17:11
add a comment |
up vote
287
down vote
The latest version of .NET (v4.6) has added built-in support for Unix time conversions. That includes both to and from Unix time represented by either seconds or milliseconds.
- Unix time in seconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset
to Unix time in seconds:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
- Unix time in milliseconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset
to Unix time in milliseconds:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Note: These methods convert to and from a UTC DateTimeOffset
. To get a DateTime
representation simply use the DateTimeOffset.UtcDateTime
or DateTimeOffset.LocalDateTime
properties:
DateTime dateTime = dateTimeOffset.UtcDateTime;
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
@BerenddeBoer You can useToLocalTime
if you want.
– i3arnon
Aug 28 '17 at 17:11
add a comment |
up vote
287
down vote
up vote
287
down vote
The latest version of .NET (v4.6) has added built-in support for Unix time conversions. That includes both to and from Unix time represented by either seconds or milliseconds.
- Unix time in seconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset
to Unix time in seconds:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
- Unix time in milliseconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset
to Unix time in milliseconds:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Note: These methods convert to and from a UTC DateTimeOffset
. To get a DateTime
representation simply use the DateTimeOffset.UtcDateTime
or DateTimeOffset.LocalDateTime
properties:
DateTime dateTime = dateTimeOffset.UtcDateTime;
The latest version of .NET (v4.6) has added built-in support for Unix time conversions. That includes both to and from Unix time represented by either seconds or milliseconds.
- Unix time in seconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset
to Unix time in seconds:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
- Unix time in milliseconds to UTC
DateTimeOffset
:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset
to Unix time in milliseconds:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Note: These methods convert to and from a UTC DateTimeOffset
. To get a DateTime
representation simply use the DateTimeOffset.UtcDateTime
or DateTimeOffset.LocalDateTime
properties:
DateTime dateTime = dateTimeOffset.UtcDateTime;
edited Jun 21 at 2:16
samlh
32
32
answered Oct 6 '14 at 22:17
i3arnon
78.8k20211254
78.8k20211254
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
@BerenddeBoer You can useToLocalTime
if you want.
– i3arnon
Aug 28 '17 at 17:11
add a comment |
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
@BerenddeBoer You can useToLocalTime
if you want.
– i3arnon
Aug 28 '17 at 17:11
1
1
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
docs.microsoft.com/en-us/dotnet/api/…
– yedevtxt
Jul 12 '17 at 16:35
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
This does not convert time to local time. You get UTC if you use DateTimeOffset.FromUnixTimeSeconds().
– Berend de Boer
Aug 27 '17 at 23:56
2
2
@BerenddeBoer You can use
ToLocalTime
if you want.– i3arnon
Aug 28 '17 at 17:11
@BerenddeBoer You can use
ToLocalTime
if you want.– i3arnon
Aug 28 '17 at 17:11
add a comment |
up vote
207
down vote
DateTime to UNIX timestamp:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
add a comment |
up vote
207
down vote
DateTime to UNIX timestamp:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
add a comment |
up vote
207
down vote
up vote
207
down vote
DateTime to UNIX timestamp:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
DateTime to UNIX timestamp:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
edited Feb 23 '16 at 15:08
Nasreddine
25.5k156083
25.5k156083
answered Sep 29 '11 at 11:12
Dmitry Fedorkov
3,51111425
3,51111425
add a comment |
add a comment |
up vote
44
down vote
"UTC does not change with a change of seasons, but local time or civil time may change if a time zone jurisdiction observes daylight saving time (summer time). For example, UTC is 5 hours ahead of (that is, later in the day than) local time on the east coast of the United States during winter, but 4 hours ahead while daylight saving is observed there."
So this is my code:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
add a comment |
up vote
44
down vote
"UTC does not change with a change of seasons, but local time or civil time may change if a time zone jurisdiction observes daylight saving time (summer time). For example, UTC is 5 hours ahead of (that is, later in the day than) local time on the east coast of the United States during winter, but 4 hours ahead while daylight saving is observed there."
So this is my code:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
add a comment |
up vote
44
down vote
up vote
44
down vote
"UTC does not change with a change of seasons, but local time or civil time may change if a time zone jurisdiction observes daylight saving time (summer time). For example, UTC is 5 hours ahead of (that is, later in the day than) local time on the east coast of the United States during winter, but 4 hours ahead while daylight saving is observed there."
So this is my code:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;
"UTC does not change with a change of seasons, but local time or civil time may change if a time zone jurisdiction observes daylight saving time (summer time). For example, UTC is 5 hours ahead of (that is, later in the day than) local time on the east coast of the United States during winter, but 4 hours ahead while daylight saving is observed there."
So this is my code:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;
answered Apr 13 '12 at 19:55
gl051
52147
52147
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
add a comment |
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
2
2
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
but this returns a double, I guess one needs to cast to long?
– knocte
May 6 '13 at 6:25
add a comment |
up vote
18
down vote
Be careful, if you need precision higher than milliseconds!
.NET (v4.6) methods (e.g. FromUnixTimeMilliseconds) don't provide this precision.
AddSeconds and AddMilliseconds also cut off the microseconds in the double.
These versions have high precision:
Unix -> DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
DateTime -> Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in yourUnixTimestampToDateTime
, the suppliedunixTime
is still in seconds, right?
– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
add a comment |
up vote
18
down vote
Be careful, if you need precision higher than milliseconds!
.NET (v4.6) methods (e.g. FromUnixTimeMilliseconds) don't provide this precision.
AddSeconds and AddMilliseconds also cut off the microseconds in the double.
These versions have high precision:
Unix -> DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
DateTime -> Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in yourUnixTimestampToDateTime
, the suppliedunixTime
is still in seconds, right?
– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
add a comment |
up vote
18
down vote
up vote
18
down vote
Be careful, if you need precision higher than milliseconds!
.NET (v4.6) methods (e.g. FromUnixTimeMilliseconds) don't provide this precision.
AddSeconds and AddMilliseconds also cut off the microseconds in the double.
These versions have high precision:
Unix -> DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
DateTime -> Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
Be careful, if you need precision higher than milliseconds!
.NET (v4.6) methods (e.g. FromUnixTimeMilliseconds) don't provide this precision.
AddSeconds and AddMilliseconds also cut off the microseconds in the double.
These versions have high precision:
Unix -> DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
DateTime -> Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
edited Feb 19 at 8:50
answered Jul 23 '14 at 8:57
Felix Keil
1,3881318
1,3881318
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in yourUnixTimestampToDateTime
, the suppliedunixTime
is still in seconds, right?
– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
add a comment |
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in yourUnixTimestampToDateTime
, the suppliedunixTime
is still in seconds, right?
– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
2
2
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
This is the correct answer. The others get the time zone incorrect on the convert back from timestamp.
– IamIC
Jun 20 '17 at 10:10
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
for DateTime->Java, just [code] return (long) unixTimeStampInTicks / TimeSpan.TicksPerMilliSecond; [/code]
– Max
Feb 17 at 18:07
So in your
UnixTimestampToDateTime
, the supplied unixTime
is still in seconds, right?– Ngoc Pham
May 3 at 21:21
So in your
UnixTimestampToDateTime
, the supplied unixTime
is still in seconds, right?– Ngoc Pham
May 3 at 21:21
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
@NgocPham yes it is
– Felix Keil
May 4 at 4:56
add a comment |
up vote
12
down vote
See IdentityModel.EpochTimeExtensions
public static class EpochTimeExtensions
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTime dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTimeOffset dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given epoch time to a <see cref="DateTime"/> with <see cref="DateTimeKind.Utc"/> kind.
/// </summary>
public static DateTime ToDateTimeFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
/// <summary>
/// Converts the given epoch time to a UTC <see cref="DateTimeOffset"/>.
/// </summary>
public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
add a comment |
up vote
12
down vote
See IdentityModel.EpochTimeExtensions
public static class EpochTimeExtensions
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTime dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTimeOffset dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given epoch time to a <see cref="DateTime"/> with <see cref="DateTimeKind.Utc"/> kind.
/// </summary>
public static DateTime ToDateTimeFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
/// <summary>
/// Converts the given epoch time to a UTC <see cref="DateTimeOffset"/>.
/// </summary>
public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
add a comment |
up vote
12
down vote
up vote
12
down vote
See IdentityModel.EpochTimeExtensions
public static class EpochTimeExtensions
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTime dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTimeOffset dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given epoch time to a <see cref="DateTime"/> with <see cref="DateTimeKind.Utc"/> kind.
/// </summary>
public static DateTime ToDateTimeFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
/// <summary>
/// Converts the given epoch time to a UTC <see cref="DateTimeOffset"/>.
/// </summary>
public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
See IdentityModel.EpochTimeExtensions
public static class EpochTimeExtensions
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTime dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given date value to epoch time.
/// </summary>
public static long ToEpochTime(this DateTimeOffset dateTime)
var date = dateTime.ToUniversalTime();
var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
var ts = ticks / TimeSpan.TicksPerSecond;
return ts;
/// <summary>
/// Converts the given epoch time to a <see cref="DateTime"/> with <see cref="DateTimeKind.Utc"/> kind.
/// </summary>
public static DateTime ToDateTimeFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
/// <summary>
/// Converts the given epoch time to a UTC <see cref="DateTimeOffset"/>.
/// </summary>
public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
var timeInTicks = intDate * TimeSpan.TicksPerSecond;
return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
edited Mar 14 '16 at 16:34
answered Apr 28 '15 at 1:22
orad
5,554134982
5,554134982
add a comment |
add a comment |
up vote
10
down vote
To supplement ScottCher's answer, I recently found myself in the annoying scenario of having both seconds and milliseconds UNIX timestamps arbitrarily mixed together in an input data set. The following code seems to handle this well:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
add a comment |
up vote
10
down vote
To supplement ScottCher's answer, I recently found myself in the annoying scenario of having both seconds and milliseconds UNIX timestamps arbitrarily mixed together in an input data set. The following code seems to handle this well:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
add a comment |
up vote
10
down vote
up vote
10
down vote
To supplement ScottCher's answer, I recently found myself in the annoying scenario of having both seconds and milliseconds UNIX timestamps arbitrarily mixed together in an input data set. The following code seems to handle this well:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
To supplement ScottCher's answer, I recently found myself in the annoying scenario of having both seconds and milliseconds UNIX timestamps arbitrarily mixed together in an input data set. The following code seems to handle this well:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
answered Oct 7 '12 at 16:14
Chris Thoman
30133
30133
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
add a comment |
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
1
1
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Be careful when not using the DateTimeKind argument, since the constructed DateTime will be in the computer's local time (thanks for the code, Chris)!
– Sam Grondahl
Sep 16 '13 at 22:40
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
Beware - this will not work for unix timestamps for dates prior to the 11th of January 1978 if they're represented in milliseconds. A unix datestamp of 253324800 (seconds) gives the correct date of 11.01.1978, whereas the millisecond representation 253324800000 gives a date of 18.07.9997. This may have worked for your data set, but it's not a general solution.
– Øyvind
May 17 at 7:24
add a comment |
up vote
6
down vote
Unix time conversion is new in .NET Framework 4.6.
You can now more easily convert date and time values to or from .NET Framework types and Unix time. This can be necessary, for example, when converting time values between a JavaScript client and .NET server. The following APIs have been added to the DateTimeOffset structure:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
add a comment |
up vote
6
down vote
Unix time conversion is new in .NET Framework 4.6.
You can now more easily convert date and time values to or from .NET Framework types and Unix time. This can be necessary, for example, when converting time values between a JavaScript client and .NET server. The following APIs have been added to the DateTimeOffset structure:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
add a comment |
up vote
6
down vote
up vote
6
down vote
Unix time conversion is new in .NET Framework 4.6.
You can now more easily convert date and time values to or from .NET Framework types and Unix time. This can be necessary, for example, when converting time values between a JavaScript client and .NET server. The following APIs have been added to the DateTimeOffset structure:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()
Unix time conversion is new in .NET Framework 4.6.
You can now more easily convert date and time values to or from .NET Framework types and Unix time. This can be necessary, for example, when converting time values between a JavaScript client and .NET server. The following APIs have been added to the DateTimeOffset structure:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()
answered Jul 23 '15 at 13:09
Fred
5,35312741
5,35312741
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
add a comment |
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
This does not give you local time, you get UTC.
– Berend de Boer
Aug 27 '17 at 23:57
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
@BerenddeBoer That's a reasonable default. You may apply a custom offset after that as you want.
– Deilan
Nov 21 '17 at 13:04
1
1
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
@BerenddeBoer That misunderstands what unix time is. Unix time is seconds since midnight, Jan 1, 1970, UTC. Doesn't matter where you are, the number of seconds since that epoch doesn't change. Converting it to human readable local time displays are separate from this universal representation, as it should be.
– Tanktalus
Sep 11 at 17:18
add a comment |
up vote
4
down vote
I found the right answer just by comparing the conversion to 1/1/1970 w/o the local time adjustment;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
add a comment |
up vote
4
down vote
I found the right answer just by comparing the conversion to 1/1/1970 w/o the local time adjustment;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
add a comment |
up vote
4
down vote
up vote
4
down vote
I found the right answer just by comparing the conversion to 1/1/1970 w/o the local time adjustment;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
I found the right answer just by comparing the conversion to 1/1/1970 w/o the local time adjustment;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
edited Jun 23 '13 at 22:16
CyberFox
495418
495418
answered Apr 12 '11 at 20:34
n8CodeGuru
185213
185213
add a comment |
add a comment |
up vote
3
down vote
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Of course, one can make unixEpoch
a global static, so it only needs to appear once in your project, and one can use AddSeconds
if the UNIX time is in seconds.
To go the other way:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Truncate to Int64 and/or use TotalSeconds
as needed.
add a comment |
up vote
3
down vote
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Of course, one can make unixEpoch
a global static, so it only needs to appear once in your project, and one can use AddSeconds
if the UNIX time is in seconds.
To go the other way:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Truncate to Int64 and/or use TotalSeconds
as needed.
add a comment |
up vote
3
down vote
up vote
3
down vote
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Of course, one can make unixEpoch
a global static, so it only needs to appear once in your project, and one can use AddSeconds
if the UNIX time is in seconds.
To go the other way:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Truncate to Int64 and/or use TotalSeconds
as needed.
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Of course, one can make unixEpoch
a global static, so it only needs to appear once in your project, and one can use AddSeconds
if the UNIX time is in seconds.
To go the other way:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Truncate to Int64 and/or use TotalSeconds
as needed.
answered Aug 12 '14 at 17:26
Hot Licks
37.6k1576133
37.6k1576133
add a comment |
add a comment |
up vote
2
down vote
A Unix tick is 1 second (if I remember well), and a .NET tick is 100 nanoseconds.
If you've been encountering problems with nanoseconds, you might want to try using AddTick(10000000 * value).
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
add a comment |
up vote
2
down vote
A Unix tick is 1 second (if I remember well), and a .NET tick is 100 nanoseconds.
If you've been encountering problems with nanoseconds, you might want to try using AddTick(10000000 * value).
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
add a comment |
up vote
2
down vote
up vote
2
down vote
A Unix tick is 1 second (if I remember well), and a .NET tick is 100 nanoseconds.
If you've been encountering problems with nanoseconds, you might want to try using AddTick(10000000 * value).
A Unix tick is 1 second (if I remember well), and a .NET tick is 100 nanoseconds.
If you've been encountering problems with nanoseconds, you might want to try using AddTick(10000000 * value).
edited Sep 11 '15 at 9:45
Peter Mortensen
13.3k1983111
13.3k1983111
answered Oct 30 '08 at 10:53
Luk
3,70443151
3,70443151
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
add a comment |
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
3
3
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
Unix is seconds past epoch - which is 1/1/70.
– ScottCher
Oct 30 '08 at 14:44
add a comment |
up vote
1
down vote
I needed to convert a timeval struct (seconds, microseconds) containing UNIX time
to DateTime
without losing precision and haven't found an answer here so I thought I just might add mine:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
return _epochTime.AddTicks(
unixTime.Seconds * TimeSpan.TicksPerSecond +
unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
add a comment |
up vote
1
down vote
I needed to convert a timeval struct (seconds, microseconds) containing UNIX time
to DateTime
without losing precision and haven't found an answer here so I thought I just might add mine:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
return _epochTime.AddTicks(
unixTime.Seconds * TimeSpan.TicksPerSecond +
unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
add a comment |
up vote
1
down vote
up vote
1
down vote
I needed to convert a timeval struct (seconds, microseconds) containing UNIX time
to DateTime
without losing precision and haven't found an answer here so I thought I just might add mine:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
return _epochTime.AddTicks(
unixTime.Seconds * TimeSpan.TicksPerSecond +
unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
I needed to convert a timeval struct (seconds, microseconds) containing UNIX time
to DateTime
without losing precision and haven't found an answer here so I thought I just might add mine:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
return _epochTime.AddTicks(
unixTime.Seconds * TimeSpan.TicksPerSecond +
unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
answered Dec 27 '13 at 6:55
i3arnon
78.8k20211254
78.8k20211254
add a comment |
add a comment |
up vote
0
down vote
public static class UnixTime
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static DateTime UnixTimeToDateTime(double unixTimeStamp)
return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
you can call UnixTime.UnixTimeToDateTime(double datetime))
add a comment |
up vote
0
down vote
public static class UnixTime
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static DateTime UnixTimeToDateTime(double unixTimeStamp)
return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
you can call UnixTime.UnixTimeToDateTime(double datetime))
add a comment |
up vote
0
down vote
up vote
0
down vote
public static class UnixTime
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static DateTime UnixTimeToDateTime(double unixTimeStamp)
return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
you can call UnixTime.UnixTimeToDateTime(double datetime))
public static class UnixTime
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
public static DateTime UnixTimeToDateTime(double unixTimeStamp)
return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
you can call UnixTime.UnixTimeToDateTime(double datetime))
edited Jun 18 at 7:43
answered Jun 18 at 7:36
madan
284
284
add a comment |
add a comment |
up vote
0
down vote
var dt = DateTime.Now;
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
// 1510396991
var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);
// [11.11.2017 10:43:11 +00:00]
add a comment |
up vote
0
down vote
var dt = DateTime.Now;
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
// 1510396991
var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);
// [11.11.2017 10:43:11 +00:00]
add a comment |
up vote
0
down vote
up vote
0
down vote
var dt = DateTime.Now;
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
// 1510396991
var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);
// [11.11.2017 10:43:11 +00:00]
var dt = DateTime.Now;
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
// 1510396991
var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);
// [11.11.2017 10:43:11 +00:00]
answered Nov 11 at 10:53
mesut
1,17621326
1,17621326
add a comment |
add a comment |
up vote
-2
down vote
For .NET 4.6 and later:
public static class UnixDateTime
public static DateTimeOffset FromUnixTimeSeconds(long seconds)
public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
if (milliseconds < -62135596800000L
public static long ToUnixTimeSeconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000000L - 62135596800L;
public static long ToUnixTimeMilliseconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000L - 62135596800000L;
[Test]
public void UnixSeconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInSeconds = utcNowOffset.ToUnixTimeSeconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeSeconds(unixTimestampInSeconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
[Test]
public void UnixMilliseconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInMilliseconds = utcNowOffset.ToUnixTimeMilliseconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeMilliseconds(unixTimestampInMilliseconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
Assert.AreEqual(utcNowOffset.Millisecond, utcNowOffsetTest.Millisecond);
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
add a comment |
up vote
-2
down vote
For .NET 4.6 and later:
public static class UnixDateTime
public static DateTimeOffset FromUnixTimeSeconds(long seconds)
public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
if (milliseconds < -62135596800000L
public static long ToUnixTimeSeconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000000L - 62135596800L;
public static long ToUnixTimeMilliseconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000L - 62135596800000L;
[Test]
public void UnixSeconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInSeconds = utcNowOffset.ToUnixTimeSeconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeSeconds(unixTimestampInSeconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
[Test]
public void UnixMilliseconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInMilliseconds = utcNowOffset.ToUnixTimeMilliseconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeMilliseconds(unixTimestampInMilliseconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
Assert.AreEqual(utcNowOffset.Millisecond, utcNowOffsetTest.Millisecond);
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
add a comment |
up vote
-2
down vote
up vote
-2
down vote
For .NET 4.6 and later:
public static class UnixDateTime
public static DateTimeOffset FromUnixTimeSeconds(long seconds)
public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
if (milliseconds < -62135596800000L
public static long ToUnixTimeSeconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000000L - 62135596800L;
public static long ToUnixTimeMilliseconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000L - 62135596800000L;
[Test]
public void UnixSeconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInSeconds = utcNowOffset.ToUnixTimeSeconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeSeconds(unixTimestampInSeconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
[Test]
public void UnixMilliseconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInMilliseconds = utcNowOffset.ToUnixTimeMilliseconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeMilliseconds(unixTimestampInMilliseconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
Assert.AreEqual(utcNowOffset.Millisecond, utcNowOffsetTest.Millisecond);
For .NET 4.6 and later:
public static class UnixDateTime
public static DateTimeOffset FromUnixTimeSeconds(long seconds)
public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
if (milliseconds < -62135596800000L
public static long ToUnixTimeSeconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000000L - 62135596800L;
public static long ToUnixTimeMilliseconds(this DateTimeOffset utcDateTime)
return utcDateTime.Ticks / 10000L - 62135596800000L;
[Test]
public void UnixSeconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInSeconds = utcNowOffset.ToUnixTimeSeconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeSeconds(unixTimestampInSeconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
[Test]
public void UnixMilliseconds()
DateTime utcNow = DateTime.UtcNow;
DateTimeOffset utcNowOffset = new DateTimeOffset(utcNow);
long unixTimestampInMilliseconds = utcNowOffset.ToUnixTimeMilliseconds();
DateTimeOffset utcNowOffsetTest = UnixDateTime.FromUnixTimeMilliseconds(unixTimestampInMilliseconds);
Assert.AreEqual(utcNowOffset.Year, utcNowOffsetTest.Year);
Assert.AreEqual(utcNowOffset.Month, utcNowOffsetTest.Month);
Assert.AreEqual(utcNowOffset.Date, utcNowOffsetTest.Date);
Assert.AreEqual(utcNowOffset.Hour, utcNowOffsetTest.Hour);
Assert.AreEqual(utcNowOffset.Minute, utcNowOffsetTest.Minute);
Assert.AreEqual(utcNowOffset.Second, utcNowOffsetTest.Second);
Assert.AreEqual(utcNowOffset.Millisecond, utcNowOffsetTest.Millisecond);
edited Sep 11 '15 at 12:36
Peter Mortensen
13.3k1983111
13.3k1983111
answered May 28 '15 at 23:35
superlogical
9,27555871
9,27555871
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
add a comment |
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
4
4
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
I do not understand. In .NET 4.6, the BCL already has those methods (see e.g. my comment to the question above, or some of the other new answers (2015). So what should the point be in writing them again? Did you mean that your answer was a solution for versions prior to 4.6?
– Jeppe Stig Nielsen
Feb 19 '16 at 10:32
add a comment |
protected by i3arnon Nov 27 '14 at 7:44
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
77
The upcoming .NET 4.6 (to be release later in this year) introduces support for this. See
DateTimeOffset.FromUnixTimeSeconds
andDateTimeOffset.ToUnixTimeSeconds
methods. There are methods for millisecond unix-time as well.– Jeppe Stig Nielsen
May 5 '15 at 9:29