2015-02-03 2 views
4

Я пытаюсь преобразовать эту метку времени в DateTime, таким образом:как преобразовать Отметка времени Unix для DATETIME

private static DateTime UnixTimeStampToDateTime(long unixTimeStamp) 
{ 
     System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); 
     dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp); 
     return dtDateTime; 
} 

Но я получаю неправильную дату: Дата: {04/11/0045 00:00:00}

Примечание: dtDateTime.AddSeconds (unixTimeStamp) бросает исключение .. мой номер в миллисекундах.

с этим онлайн-инструментом преобразования http://www.epochconverter.com/ я получаю правильное преобразование:

04/11/2014 15:35:03 GMT + 0: 00

Как я могу преобразовать это?

+0

Возможный дубликат http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa –

+2

Итак, я бы сказал, что вам нужны AddSeconds вместо этого? –

+0

@ JoãoMiguelBrandão это не дубликат, потому что преобразование в этой статье не работает – DevT

ответ

9

Ваш код работает отлично, как есть. Вот fiddle.

Все, кто говорит вам использовать AddSeconds, являются неправильными. Число, которое вы нам даете, явно в миллисекундах. Есть 31 536 000 секунд в год. 1415115303410, деленная на 31536000, составляет 4487. С 1 января 1970 года прошло 4 487 лет.

+0

Это дает право дата, но не время. Эта дата: 150358320- 25 августа 2017 года в 9 утра, но ваш код дает мой 25 августа 2017 года в 2 вечера – DevShadow

+1

@DevShadow Это, вероятно, проблема с часовым поясом. В моей скрипке я использую время UTC. 2PM, вероятно, правильное время в вашем часовом поясе. – Icemanind

6

использовать AddSeconds вместо AddMilliseconds

private static DateTime UnixTimeStampToDateTime(long unixTimeStamp) 
{ 
    System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
    dtDateTime = dtDateTime.AddSeconds(unixTimeStamp); 
    return dtDateTime; 
} 
+0

Как я уже сказано, AddSeconds генерирует исключение, мой номер находится в миллисекундах – DevT

2
public DateTime FromUnixTime(long unixTime) 
{ 
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
    return epoch.AddMilliseconds(unixTime); 
} 

var date = FromUnixTime(1415115303410); // 11/4/2014 3:35:03 PM 

Поскольку ваш номер находится в миллисекундах, Unix time, используйте AddMilliseconds.

+0

Я не вижу, как это отличается от того, что опубликовано OP. Однако он работает. Я думаю, как говорит @icemanind, код OP уже работает. https://dotnetfiddle.net/pGF3km – paqogomez

+0

Правильно, это то же самое, я думал, что у него есть «AddSeconds» там (запутался в последних изменениях), тем не менее, это правильный ответ ... – Ofiris

1

Try This

DateTime date = new DateTime(Convert.ToInt64("1415115303410")); 
+2

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – kayess

4

Просто используйте DateTimeOffset

DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(1415115303410)

0

Дата для Timestamp

DateTime date = DateTime.ParseExact(date_string, "dd/MM/yyyy H:mm:ss", null); 
Double timestamp = Math.Truncate((date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds); 

Timestamp в Дата

DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Unspecified); 
dtDateTime = dtDateTime.AddSeconds(Double.Parse(arrayFinalResponse[i, 5])).ToLocalTime(); 
String date = dtDateTime.ToString("dd/MM/yyyy H:mm:ss", CultureInfo.GetCultureInfo("en-US")); 
1

Microsoft продолжает думать о нас! Все решения для добавления секунд/миллисекунд не работают с Visual Studio 2017 (.Net 4.6.1). Но есть новое решение:


public static DateTime numStrToDate(String val) 
{ 
    DateTime dRet = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    long dSec; 
    if (long.TryParse(val, out dSec)) 
    { 
     TimeSpan ts = new TimeSpan(dSec*10l); 
     dRet = dRet.Add(ts); 
    } 
    return dRet; 
} 

Если вам нужно время, UTC - просто добавьте 'System.DateTimeKind.Utc' в вызове конструктора DateTime.

Смежные вопросы