Источник для примера можно найти в Linux с MQ, установленным в /opt/mqm
в /opt/mqm/samp/amqsevta.c
.
В MQMD
(дескриптор сообщения) каждого сообщения есть поля PutDate
и PutTime
, которые всегда хранятся в GMT и представляют собой простые 8-значные строки, например:
- PutDate: 20180904 (ГГГГММДД)
- PutTime: 20173948 (ЧЧММССС)
В примере программы он просто преобразует это в отображаемый формат 2018/09/04 20:17:39.48
и добавляет GMT
в конец, поскольку знает, что это всегда в GMT.
/**********************************************************/
/* Timestamp is read from the MQMD - it is always in GMT */
/* regardless of local timezone. Do not want to try to */
/* convert it, because this machine may be a client in a */
/* different timezone than the server generating the */
/* event. So stick to GMT (or UCT if you prefer). */
/**********************************************************/
sprintf(valbuf,"%4.4s/%2.2s/%2.2s %2.2s:%2.2s:%2.2s.%2.2s GMT",
&pMsgDesc->PutDate[0],
&pMsgDesc->PutDate[4],
&pMsgDesc->PutDate[6],
&pMsgDesc->PutTime[0],
&pMsgDesc->PutTime[2],
&pMsgDesc->PutTime[4],
&pMsgDesc->PutTime[6]);
printLine(offset,"Event created",valbuf);
Похоже, вы могли бы использовать функцию c strptime
, чтобы проанализировать строку в метку времени эпохи, а затем распечатать ее в вашем местном часовом поясе.