quickfix发送时间(字段52)丢弃毫秒
我正在用Python的QuickFix库,连接到一个TT FIX适配器,使用的是FIX4.2协议。
我已经成功登录并发送了市场数据请求,回复也没问题。在我的消息日志中(无论是屏幕日志还是文件日志),我看到的发送时间(字段52)看起来像这样:
52=20130207-02:38:32.212
但是,当我尝试获取这个字段并打印到终端或文件时,结果总是去掉了毫秒部分。所以结果总是:
52=20130207-02:38:32
这显然是不对的。我想不出为什么毫秒最开始会有,然后在我访问时又被去掉了。
也许这是Python的一个特性,因为它用'.'来访问属性?但这听起来很奇怪,因为发送时间是个字符串,按理说字符串里是可以有点的。
如果有人能帮忙就太好了,我真的希望能把准确的时间戳打印到文件里。
谢谢,
Wapiti
2 个回答
试着用 FieldMap 的 const std::string & getField (int field)
函数来提取字段。这样你可以把字段当作字符串获取,而不用担心把它转换成日期类型。我敢打赌,这样至少在文本上能保留毫秒信息。
抱歉,我无法帮你解决为什么 Python 会丢失毫秒的问题。我对 Python 的封装了解得不够多。
编辑:不,这不是正确的答案。我之前不知道你不是从头部提取字段。(当然,你仍然可以在头部使用这个函数。)
我通过指定 getField 函数去查看消息的头部解决了我的问题。所以:
sendingTime= quickfix.SendingTime()
print sendingTime, "\n"
message.getHeader().getField(sendingTime)
print sendingTime, "\n"
第一行打印出来的时间是发送时间,但毫秒部分被省略了(我也不知道为什么),看起来像 52=20130207-02:38:32
第二行打印的实际上是查看了头部(字段 52 在这里),获取了完整的字段,结果看起来像:
52=20130207-02:38:32.212
这就解释了为什么当我尝试 message.getField(sendingTime)
时会出现 找不到字段 的错误。