Преобразование местного времени (10-значное число) в читаемый формат даты и времени

Я работаю с АТС для VoIP-звонков. Одним из аспектов pbx является то, что вы можете выбрать получение пакетов CDR. Эти пакеты имеют 2 временные метки: "utc" и "local", но обе они всегда одинаковы.

Вот пример метки времени: "1268927156".

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

Вещи, которые я пытался:

  • Datetime dt = новый Datetime(число);
  • Интервал времени ts = новый интервал времени (число);
  • DateTime utc = новый DateTime(номер + 504911232000000000, DateTimeKind.Utc)

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

Я скучаю по чему-то глупому здесь?

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

4 ответа

Решение

Это похоже на время 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 );

Кажется, это отметка времени Unix (количество секунд с начала эпохи)

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

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

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

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

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

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

Отметка времени UNIX представляет время, измеренное в секундах с начала эпохи Unix (1 января 1970 г. 00:00:00 по Гринвичу)

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

// 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);
Другие вопросы по тегам