2015-09-25 58 views

回答

1

您可以先嚐試修改您的數據字典。例如,如果您使用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:,因爲你的格式有六位額外的數字。它看起來像函數的其餘部分並不關心總字段長度。

當然,如果您想實際檢查這些時間戳的亞毫秒精度部分,則需要做更多。

+0

感謝您的快速回復! 我會看看修改datadictionary是否足夠。 – hrannarorn

+0

請注意:看起來像這個答案是特定於C++。你標記了「quickfixn」,所以實際的代碼更改會有所不同。 –

+0

我目前在C++ impl中使用C#封裝,但我希望在不久的將來可以遷移到quickfixn – hrannarorn

1

QF/n沒有計劃,但只是因爲這是我聽說過的第一個。

我需要編寫一些測試以瞭解其影響。當它將字符串轉換爲DateTime時,時間/日期解析器可能會截斷多餘的納米位置。

我開了一個問題:https://github.com/connamara/quickfixn/issues/352

1

這種變化是據我知道那種打破時間戳的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;