2011-07-03 8 views
5

Я не знаю, почему это так сложно!C# конвертировать UTC int в объект DateTime

У меня есть плагин, который проходит в длинном int UTC. Мне нужно преобразовать это число в DateTime для запроса моей базы данных (SQL Server).

Я не знаю почему, но я не могу найти работоспособный ответ из основного поиска Google.

(Для дополнительного кредита, мне нужно, чтобы превратить мой вернулся DateTime обратно в UTC в конце дня.)

Это неудобно иметь, чтобы задать такой простой вопрос! :)

+1

от * UTC int *, вы имеете в виду что-то вроде секунд с эпохи? – bzlm

ответ

19

Моя догадка это будет либо миллисекунды или секунды с момента определенной эпохи - вполне возможно, в Unix эпохи 1 января 1970 года, в полночь по Гринвичу.

Так что код будет выглядеть примерно так:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 
                  DateTimeKind.Utc); 

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds) 
{ 
    return UnixEpoch.AddMilliseconds(milliseconds); 
} 

сделать очевидные изменения в секунды, или из другой эпохи :)

Альтернативный подход заключается в создании TimeSpan из секунд/миллисекунд с эпохи, а затем добавить его к эпохе:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 
                  DateTimeKind.Utc); 

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds) 
{ 
    return UnixEpoch + TimeSpan.FromMilliseconds(milliseconds); 
} 

Я не знаю ни одной существенной разницы между ними - хотя тот факт, что AddMilliseconds принимает double вместо long, что для очень больших значений может быть предпочтительным подход TimeSpan. Я сомневаюсь, что это будет иметь значение, хотя :)

+1

Спасибо !!!! Это именно то, что мне нужно. –

9

Есть ли у вас секунды, миллисекунды или что? После преобразования его в тики (один тик .NET составляет 100 наносекунд), например. по long ticks = theDBDateNum*TimeSpan.TicksPerMillisecond;, попробуйте следующее:

DateTime theDate = new DateTime(ticks, DateTimeKind.Utc); 
+1

Это предположение о том, что это то же самое, что и .NET. Это кажется маловероятным в моем опыте. –

+0

Да. Прошло несколько секунд с эпохи. –

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