Преобразование местного времени (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);