2010-03-19 7 views
5

Я работаю с pbx для звонков в voip. Один из аспектов pbx заключается в том, что вы можете выбрать прием CDR-пакетов. Эти пакеты имеют 2 временных метки: «utc» и «local», но оба кажутся всегда одинаковыми.Преобразование локального времени (10-значное число) в формат read-datetime

Вот пример временной метки: «1268927156».

На первый взгляд, похоже, в этом нет никакой логики. Поэтому я попытался преобразовать его несколькими способами, но без хорошего результата. Это значение должно обеспечить время около 11 утра (+ 1GMT) сегодня.

Что я пробовал:

  • Datetime дт = новый Datetime (номер);
  • Timespan ts = new Timespan (number);
  • DateTime = UTC новый DateTime (номер + 504911232000000000, DateTimeKind.Utc)

и некоторые другие, которые я не могу вспомнить прямо сейчас.

Я пропустил что-то глупое здесь?

Заранее спасибо

+0

Разве эти классы не имеют метода ToString или Format? – lexu

ответ

12

Это выглядит как Unix время.

1268927156 = чт, 18 марта 2010 15:45:56 GMT

И пример кода: (. Кол-во секунд с начала эпохи)

DateTime startDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
DateTime time = startDate.AddSeconds(1268927156); 
+0

вопрос исправлен, все отличные ответы, спасибо – Terry

2

Кажется, временная метка Unix

DateTime translated = new DateTime(1970,1,1).AddSeconds(1268927156); 

должно дать вам дату и время вы были после того, как ...

1

Я предполагаю, что это временная метка UNIX, то вот ГИК будет следующим:

Отметка UNIX представляет собой время, измеренное в числе секунд с Unix Epoch (1 января 1970 00:00:00 GMT)

Там является codeproject article объяснения преобразование. В основном то, что вам нужно сделать, будет следующее:

// First make a System.DateTime equivalent to the UNIX Epoch. 
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
// Add the number of seconds in UNIX timestamp to be converted. 
dateTime = dateTime.AddSeconds(timestamp); 
1

Это выглядит как метку времени Unix, который нет. секунд с 01 января 1970 года.

DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(1268927156); 

Если оба по Гринвичу и местным временные метки совпадают, временная зона на УАТС либо по Гринвичу, и ваши временные метки действительно UTC или часовой пояс по Гринвичу, но время устанавливается на ваш местное время, и вы получаете свое местное время для обеих временных меток. Вам нужно будет выяснить, кто из них, так что вы будете знать, как конвертировать временные метки с UTC или нет.