Раз уж есть исходники, вот небольшая доработка для тех, кому позарез нужны миллисекунды
Code
public static class LoggingHelper
{
private static readonly Stopwatch _timer;
private static readonly DateTime _startDate;
static LoggingHelper()
{
_timer = new Stopwatch();
_startDate = DateTime.Now;
_timer.Start();
}
/// <summary>
/// Текущее время.
/// </summary>
public static DateTime Now
{
get { return _startDate + _timer.Elapsed + NowOffset; }
}
/// <summary>
/// Временное смещение. Неоходимо устанавливать, когда торговая программа работает с неточными настройками локального времени.
/// Значение <see cref="Now"/> будет корректироваться в зависимости от установленного значения.
/// </summary>
public static TimeSpan NowOffset { get; set; }
private static TimeSpan _timeZoneOffset = TimeZoneInfo.Local.BaseUtcOffset;
/// <summary>
/// Временное смещение временной зоны.
/// </summary>
public static TimeSpan TimeZoneOffset
{
get { return _timeZoneOffset; }
set { _timeZoneOffset = value; }
}
/// <summary>
/// Синхронизировать <see cref="NowOffset"/> между локальным временем на компьютере и NTP сервером в интернете.
/// </summary>
/// <param name="timeout">Таймаут синхронизации в милисекундах.</param>
public static void SyncMarketTime(int timeout = 5000)
{
var dtNow = _startDate + _timer.Elapsed;
NowOffset = new NtpClient().GetLocalTime(TimeZoneInfo.Local, timeout).Subtract(dtNow);
}
.....
Критика приветствуется