所有INET Nordic FIX協議將通過在2015年10月16日(see notification和section 3.1.1 in the spec)上延伸至納秒粒度時間戳進行增強。INET Nordic FIX協議延伸至納秒粒度時間戳
時間戳看起來就像這樣:20150924-10:35:20.840117690
的quickfix目前拒絕包含的字段與錯誤這種新格式的消息:對於價值不正確的數據格式
是否有任何支持這種新格式的計劃?或者,也許一些解決方法?
所有INET Nordic FIX協議將通過在2015年10月16日(see notification和section 3.1.1 in the spec)上延伸至納秒粒度時間戳進行增強。INET Nordic FIX協議延伸至納秒粒度時間戳
時間戳看起來就像這樣:20150924-10:35:20.840117690
的quickfix目前拒絕包含的字段與錯誤這種新格式的消息:對於價值不正確的數據格式
是否有任何支持這種新格式的計劃?或者,也許一些解決方法?
您可以先嚐試修改您的數據字典。例如,如果您使用QuickFIX附帶的fix42.xml
,則可以將受影響的時間戳字段從type='UTCTIMESTAMP'
更改爲type='STRING'
。
如果這還不夠,你應該不是寫反++的QuickFix在C,一旦你知道在哪裏可以修補它應該是有點簡單,我認爲這是UtcTimeStampConvertor
,在這裏補丁:https://github.com/quickfix/quickfix/blob/master/src/C%2B%2B/FieldConvertors.h#L564
我認爲你需要在case 21:
上面附近添加一個case 27:
,因爲你的格式有六位額外的數字。它看起來像函數的其餘部分並不關心總字段長度。
當然,如果您想實際檢查這些時間戳的亞毫秒精度部分,則需要做更多。
QF/n沒有計劃,但只是因爲這是我聽說過的第一個。
我需要編寫一些測試以瞭解其影響。當它將字符串轉換爲DateTime時,時間/日期解析器可能會截斷多餘的納米位置。
這種變化是據我知道那種打破時間戳的FIX協議定義但這是另一個故事。
在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;
感謝您的快速回復! 我會看看修改datadictionary是否足夠。 – hrannarorn
請注意:看起來像這個答案是特定於C++。你標記了「quickfixn」,所以實際的代碼更改會有所不同。 –
我目前在C++ impl中使用C#封裝,但我希望在不久的將來可以遷移到quickfixn – hrannarorn