以本地时间解析 IBM MQ Event Monitoring 消息
Parse IBM MQ Event Monitoring messages in local time
我正在使用 IBM 提供的示例程序 amqsevt 来监视 MQ 事件队列并解析消息。但我注意到默认情况下事件创建时间以 GMT 时间表示。我想把它转换成系统本地时间。有办法实现吗?
**** Message #1 (120 Bytes) on Queue SYSTEM.ADMIN.CHANNEL.EVENT ****
Event Type : Channel Event [46]
Reason : Channel Stopped By User [2279]
Event created : 2018/09/04 20:17:39.48 GMT
示例的源代码可以在 Linux 上找到,MQ 安装在 /opt/mqm
的 /opt/mqm/samp/amqsevta.c
。
在每条消息的 MQMD
(消息描述符)中,有一个 PutDate
和 PutTime
字段,它们始终以 GMT 格式存储,每个都是简单的 8 位字符串,例如:
- PutDate: 20180904 (YYYYMMDD)
- PutTime: 20173948 (HHMMSSSS)
在示例程序中,它只是将其转换为 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
将字符串解析为纪元时间戳,然后以您当地的时区打印。
我正在使用 IBM 提供的示例程序 amqsevt 来监视 MQ 事件队列并解析消息。但我注意到默认情况下事件创建时间以 GMT 时间表示。我想把它转换成系统本地时间。有办法实现吗?
**** Message #1 (120 Bytes) on Queue SYSTEM.ADMIN.CHANNEL.EVENT ****
Event Type : Channel Event [46]
Reason : Channel Stopped By User [2279]
Event created : 2018/09/04 20:17:39.48 GMT
示例的源代码可以在 Linux 上找到,MQ 安装在 /opt/mqm
的 /opt/mqm/samp/amqsevta.c
。
在每条消息的 MQMD
(消息描述符)中,有一个 PutDate
和 PutTime
字段,它们始终以 GMT 格式存储,每个都是简单的 8 位字符串,例如:
- PutDate: 20180904 (YYYYMMDD)
- PutTime: 20173948 (HHMMSSSS)
在示例程序中,它只是将其转换为 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
将字符串解析为纪元时间戳,然后以您当地的时区打印。