1

所有 INET Nordic FIX 协议都将通过在 2015 年 16 月 16 日扩展到纳秒粒度时间戳来增强(请参阅规范中的通知第 3.1.1 节)。

时间戳将如下所示:20150924-10:35:20.840117690

quickfix 当前拒绝包含具有这种新格式的字段的消息,并出现错误:值的数据格式不正确

是否有计划支持这种新格式?或者也许有一些解决方法?

4

3 回答 3

1

您可以先尝试修改数据字典。例如,如果您使用fix42.xml的是 QuickFIX 附带的,您可以将受影响的时间戳字段从 更改type='UTCTIMESTAMP'type='STRING'

如果这还不够,你应该用 C++ 编写一个针对 QuickFIX 的补丁,一旦你知道在哪里修补它,这应该有点简单,我认为是UtcTimeStampConvertor,在这里:https ://github.com/quickfix/quickfix /blob/master/src/C%2B%2B/FieldConvertors.h#L564

我认为您需要在顶部附近添加一个case 27:以上,因为您的格式有六个额外的数字。case 21:看起来函数的其余部分并不关心总字段长度。

当然,如果您想实际检查这些时间戳的亚毫秒精度部分,则需要做更多工作。

于 2015-09-25T08:59:30.397 回答
1

QF/n 没有计划,但这只是因为这是我第一次听说这个。

我需要写一些测试来看看有什么影响。可能是时间/日期解析器在将字符串转换为 DateTime 时只是截断了额外的 nano 位置。

我打开了一个问题:https ://github.com/connamara/quickfixn/issues/352

于 2015-09-25T16:21:43.937 回答
1

据我所知,这种变化打破了时间戳的修复协议定义,但这是另一回事。

QuickFixn 中有一个名为 DateTimeConverter 的静态类,位于 QuickFix/Fields/Converters 下。

要使其正常工作,您需要在该类的行中添加格式字符串。

将“yyyyMMdd-HH:mm:ss.fffffff”添加到 DATE_TIME_FORMATS 并将“HH:mm:ss.fffffff”添加到 TIME_ONLY_FORMATS,使其看起来像这样。

/// <summary>
/// Convert DateTime to/from String
/// </summary>
public static class DateTimeConverter
{
    public const string DATE_TIME_FORMAT_WITH_MILLISECONDS = "{0:yyyyMMdd-HH:mm:ss.fff}";
    public const string DATE_TIME_FORMAT_WITHOUT_MILLISECONDS = "{0:yyyyMMdd-HH:mm:ss}";
    public const string DATE_ONLY_FORMAT = "{0:yyyyMMdd}";
    public const string TIME_ONLY_FORMAT_WITH_MILLISECONDS = "{0:HH:mm:ss.fff}";
    public const string TIME_ONLY_FORMAT_WITHOUT_MILLISECONDS = "{0:HH:mm:ss}";
    public static string[] DATE_TIME_FORMATS = { "yyyyMMdd-HH:mm:ss.fffffff", "yyyyMMdd-HH:mm:ss.fff", "yyyyMMdd-HH:mm:ss" };
    public static string[] DATE_ONLY_FORMATS = { "yyyyMMdd" };
    public static string[] TIME_ONLY_FORMATS = { "HH:mm:ss.fffffff", "HH:mm:ss.fff", "HH:mm:ss" };
    public static DateTimeStyles DATE_TIME_STYLES = DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal;
    public static CultureInfo DATE_TIME_CULTURE_INFO = CultureInfo.InvariantCulture;
于 2015-09-29T09:54:39.243 回答