INET Nordic FIX协议扩展到纳秒级粒度时间戳

时间:2015-09-25 08:56:00

标签: quickfix quickfixn

所有INET Nordic FIX协议将通过在2015年6月16日(see notificationsection 3.1.1 in the spec)扩展到纳秒级粒度时间戳来增强。

时间戳如下:20150924-10:35:20.840117690

quickfix目前拒绝包含此新格式字段的邮件,错误为:值不正确的数据格式

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

3 个答案:

答案 0 :(得分:1)

您可以先尝试修改数据字典。例如,如果您使用的是QuickFIX附带的table { width: 100%; } td { text-align: right; white-space: nowrap; } td div { white-space: normal; word-break: break-all; display: block; } ,则可以将受影响的时间戳字段从fix42.xml更改为type='UTCTIMESTAMP'

如果这还不够,你应该在C ++中编写一个针对QuickFIX的补丁,一旦你知道在哪里修补它就应该有点直截了当,我认为type='STRING'就在这里:{{3 }}

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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;