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

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

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

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

То, что я пробовал:

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

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

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

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

Ответы [ 4 ]

12 голосов
/ 19 марта 2010

Это выглядит как 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 );
2 голосов
/ 19 марта 2010

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

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

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

1 голос
/ 19 марта 2010

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

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

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

1 голос
/ 19 марта 2010

Полагаю, это временная метка 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);
...