Как да получим UNIX времеви отпечатък в C #

Погледнах на stackoverflow и дори погледнах някои от предложените въпроси и никой не ми отговори, как ще получите unix timestamp на C #?

249
13 июля '13 в 20:33 2013-07-13 20:33 зададен от bizzehdee на 13 юли '13 в 20:33 2013-07-13 20:33
@ 9 отговора

Получавате unix timestamp в C #, използвайки DateTime.UtcNow и изваждайки времето epoc 1970-01-01.

например.

 Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; 

DateTime.Now може да бъде заменен от всеки обект DateTime за който искате да получите unix timestamp for.

442
13 июля '13 в 20:33 2013-07-13 20:33 отговорът е даден от bizzehdee 13 юли '13 в 20:33 2013-07-13 20:33

Започвайки с .NET 4.6, има DateTimeOffset.ToUnixTimeSeconds() .


Това е метод на потребителски модел, така че трябва да го наречете екземпляр DateTimeOffset . Можете също да използвате всеки екземпляр на DateTime , но внимавайте за часовата зона .

За да получите текущия срок:

border=0
 DateTimeOffset.UtcNow.ToUnixTimeSeconds() 

За да получите времева клейма от DateTime :

 DateTime foo = DateTime.UtcNow; long unixTime = ((DateTimeOffset)foo).ToUnixTimeSeconds(); 
282
16 февр. Отговорът е даден от Боб на 16 февруари. 2016-02-16 09:15 '16 в 9:15 ч. 2016-02-16 09:15

Можете да използвате и кърлежи. Аз код за Windows Mobile, така че аз не разполагат с пълен набор от методи. TotalSeconds не е достъпен за мен.

 long epochTicks = new DateTime(1970, 1, 1).Ticks; long unixTime = ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond); 

или

 TimeSpan epochTicks = new TimeSpan(new DateTime(1970, 1, 1).Ticks); TimeSpan unixTicks = new TimeSpan(DateTime.UtcNow.Ticks) - epochTicks; double unixTime = unixTicks.TotalSeconds; 
34
23 окт. Отговор, даден от Дейв Хиндъл на 23 октомври. 2014-10-23 15:36 '14 в 15:36 2014-10-23 15:36

Ето какво използвам:

 public long UnixTimeNow() { var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); return (long)timeSpan.TotalSeconds; } 

Имайте предвид, че този метод ще върне времето като координирано универсално време (UTC).

21
11 янв. Отговорът е даден на Bartłomiej Mucha 11 Jan. 2014-01-11 01:16 '14 в 1:16 2014-01-11 01:16

.TotalSeconds е важно, защото се дефинира като the value of the current System.TimeSpan structure expressed in whole fractional seconds.

Ами разширенията за DateTime ? Вторият вероятно е по-объркващ, тъй като той се намира, докато се създадат разширения за свойства.

 /// <summary> /// Converts a given DateTime into a Unix timestamp /// </summary> /// <param name="value">Any DateTime</param> /// <returns>The given DateTime in Unix timestamp format</returns> public static int ToUnixTimestamp(this DateTime value) { return (int)Math.Truncate((value.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds); } /// <summary> /// Gets a Unix timestamp representing the current moment /// </summary> /// <param name="ignored">Parameter ignored</param> /// <returns>Now expressed as a Unix timestamp</returns> public static int UnixTimestamp(this DateTime ignored) { return (int)Math.Truncate((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); } 
16
20 марта '14 в 19:55 2014-03-20 19:55 отговорът е даден Брад 20 март, '14 в 19:55 2014-03-20 19:55

Когато изваждате 1970 от текущото време, имайте предвид, че в графика най-често ще има поле с нула милисекунди. Ако по някаква причина се интересувате от милисекунди, запомнете това.

Ето какво направих, за да заобиколя този проблем.

  DateTime now = UtcNow(); // milliseconds Not included. DateTime nowToTheSecond = new DateTime(now.Year,now.Month,now.Day,now.Hour,now.Minute,now.Second); TimeSpan span = (date - new DateTime(1970, 1, 1, 0, 0, 0, 0)); Assert.That(span.Milliseconds, Is.EqualTo(0)); // passes. 
6
30 сент. Отговорът е даден от Кели Андерсън на 30 септември. 2015-09-30 22:35 '15 в 22:35 ч. 2015-09-30 22:35

Това е, което използвам.

  public class TimeStamp { public Int32 UnixTimeStampUTC() { Int32 unixTimeStamp; DateTime currentTime = DateTime.Now; DateTime zuluTime = currentTime.ToUniversalTime(); DateTime unixEpoch = new DateTime(1970, 1, 1); unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds; return unixTimeStamp; } } 
4
14 дек. Отговорът е даден от Матю Джеймс Луис на 14 декември. 2013-12-14 07:49 '13 в 7:49 2013-12-14 07:49

Това решение ми помогна в моята ситуация:

  public class DateHelper { public static double DateTimeToUnixTimestamp(DateTime dateTime) { return (TimeZoneInfo.ConvertTimeToUtc(dateTime) - new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds; } } 

с помощта на помощник в кода:

 double ret = DateHelper.DateTimeToUnixTimestamp(DateTime.Now) 
2
24 июля '17 в 22:59 2017-07-24 22:59 Отговорът е даден от Aslan Kystaubayev 24 юли '17 в 22:59 часа 2017-07-24 22:59

Съчетах най-елегантните подходи към този утилитарен метод:

 public static class Ux { public static decimal ToUnixTimestampSecs(this DateTime date) => ToUnixTimestampTicks(date) / (decimal) TimeSpan.TicksPerSecond; public static long ToUnixTimestampTicks(this DateTime date) => date.ToUniversalTime().Ticks - UnixEpochTicks; private static readonly long UnixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks; } 
2
23 окт. даден xDisruptor 23 окт. 2017-10-23 12:09 '17 в 12:09 2017-10-23 12:09

Други въпроси относно маркерите или Ask a Question