Как получить миллисекунды из group.getMDEntryTime().getValue()

Как получить миллисекунды от QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries

Вот мой код

private DateTime getClose(QuickFix44.MarketDataSnapshotFullRefresh mds)
{
  DateTime close = new DateTime(0L);
  try
  {
    DateTime last = new DateTime(0L);
    QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries group = new QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries();
      for (uint i = 1; i < mds.getNoMDEntries().getValue(); i++)
    {
      group = (QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries)mds.getGroup(i, group);
      if (group.getMDEntryTime().getValue() != null)
      {

        last = new DateTime(group.getMDEntryDate().getValue().Ticks + group.getMDEntryTime().getValue().Ticks);
        close = ((close.Ticks > last.Ticks) ? close : last);
      }
    }
  }
  catch (Exception e) { }
  //return TimeZoneInfo.ConvertTime(close, TimeZoneInfo.Utc, TimeZoneInfo.Local);
  return close;
}

Но когда я печатаю дату закрытия, я получаю дату с миллисекундами как 000, как показано ниже.

08/28/2015 18:43:48.000


person user1570144    schedule 28.08.2015    source источник
comment
не могли бы вы сделать что-то вроде этого last = DateTime.Now.ToString("hh.mm.ss.ffffff"); или еще лучше что-то такое же простое, как это DateTime.Now.Millisecond   -  person MethodMan    schedule 28.08.2015
comment
Я это сделал. Но я не хочу добавлять или показывать миллисекунды из моей системы в целях точности. Мне нужна точная отметка времени, которая появляется при каждом обновлении рыночных данных.   -  person user1570144    schedule 28.08.2015
comment
затем используйте ту же концепцию, поскольку вы захватываете TimeStamp или DateTime из этого объекта, почему вы не можете использовать функцию string.Format..   -  person MethodMan    schedule 28.08.2015
comment
Я сделал это, но я не получаю миллисекундную часть, потому что в функции getValue() она отбрасывается. Есть настройка, чтобы установить его true, но я не могу этого сделать. Это НЕ чистый вопрос, связанный с С#. Это вопрос FIX4.4.   -  person user1570144    schedule 28.08.2015
comment
Ясно.. мои извинения игнорируют мои предыдущие комментарии..   -  person MethodMan    schedule 28.08.2015
comment
Это версия QF на C++ в SWIG, не так ли? (Не QuickFIX/n.)   -  person Grant Birchmeier    schedule 29.08.2015


Ответы (2)


Похоже, ваш поставщик рыночных данных не отправляет вам миллисекунды...

last = new DateTime(group.getMDEntryDate().getValue().Ticks + group.getMDEntryTime().getValue().Ticks);

Или, если это так, вы можете попробовать получить MDEntryDate напрямую, например:

group.getField(new StringField("272")).getValue()
person rupweb    schedule 29.08.2015
comment
@Wapiti Вы правы. Мой провайдер не отправляет миллисекунды на демо-счете. Итак, вытащил значение из поля заголовка 52. - person user1570144; 31.08.2015
comment
Рад, что смог помочь некоторым. Похоже, rupweb тоже помог. Ты хотел принять его ответ или мой? Жаль, что вы не можете принять оба! - person Wapiti; 01.09.2015
comment
ха-ха, я думаю, это была проблема с данными провайдера, сначала нет?! ха-ха... Но, кроме того, заголовок сообщения - это время, когда сообщение отправляется провайдером, а не время, когда провайдер фактически выполняет его на своей стороне. Верно? Хотя я не уверен, что это имеет значение. - person rupweb; 01.09.2015

Я не говорю на этом языке, но у меня была аналогичная проблема в python, которую я решил, посмотрев на заголовок сообщения, а не где-либо еще. На всякий случай, если это вам поможет, см. вопрос здесь.

person Wapiti    schedule 29.08.2015