1

すべての INET Nordic FIX プロトコルは、2015 年 10 月 16 日にナノ秒単位のタイムスタンプに拡張することで強化されます (通知仕様のセクション 3.1.1 を参照してください)。

タイムスタンプは次のようになります: 20150924-10:35:20.840117690

現在、quickfix は、この新しい形式のフィールドを含むメッセージを次のエラーで拒否します:値のデータ形式が正しくありません

この新しいフォーマットをサポートする予定はありますか? または多分いくつかの回避策?

4

3 に答える 3

1

この変更は、私が知る限り、タイムスタンプの修正プロトコル定義を壊すようなものですが、それは別の話です。

QuickFix/Fields/Converters の下に、DateTimeConverter という QuickFixn の静的クラスがあります。

これを正しく機能させるには、そのクラスの行にフォーマット文字列を追加する必要があります。

DATE_TIME_FORMATS に「yyyyMMdd-HH:mm:ss.ffffffff」、TIME_ONLY_FORMATS に「HH:mm:ss.fffffff」を追加すると、このようになります。

/// <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 に答える
1

まず、データ ディクショナリを変更してみてください。たとえばfix42.xml、QuickFIX に付属の を使用している場合、影響を受けるタイムスタンプ フィールドを からtype='UTCTIMESTAMP'に変更できますtype='STRING'

それだけでは不十分な場合は、代わりに C++ で QuickFIX に対するパッチを作成する必要があります。これは、どこにパッチを適用するかがわかれば、やや簡単なはずUtcTimeStampConvertorです。 /blob/master/src/C%2B%2B/FieldConvertors.h#L564

形式には 6 桁の余分な数字があるため、上部近くにcase 27:上記を追加する必要があると思います。case 21:関数の残りの部分はフィールドの合計長を気にしないようです。

もちろん、これらのタイムスタンプのミリ秒未満の精度部分を実際に調べたい場合は、さらに多くのことを行う必要があります。

于 2015-09-25T08:59:30.397 に答える