QUIKSharp
QUIKSharp copied to clipboard
Операторы работы с Датой. QuikDateTime перегрузка операторов сравнения.
предлагаю добавить перегрузку операторов сравнения чтобы можно было делать так:
// выбрать свечи за период
public IEnumerable<Candle> GetCandlesByPeriod(QuikDateTime from, QuikDateTime to)
{
return Candles.Where(x => x.Datetime >= from && x.Datetime < to);
}
или так
// Добавить один день к дате
var today = DateTime.Now;
var from = new QuikDateTime
{
year = today.Year,
month = today.Month,
day = today.Day
}.AddDays(-1);
реализация приблизительно такая + комменты
public class QuikDateTime : IComparable<QuikDateTime>
{
...
public int CompareTo(QuikDateTime qdt2)
{
if (year < qdt2.year) return -1;
if (year > qdt2.year) return 1;
if (month < qdt2.month) return -1;
if (month > qdt2.month) return 1;
if (day < qdt2.day) return -1;
if (day > qdt2.day) return 1;
if (hour < qdt2.hour) return -1;
if (hour > qdt2.hour) return 1;
if (min < qdt2.min) return -1;
if (min > qdt2.min) return 1;
if (sec < qdt2.sec) return -1;
if (sec > qdt2.sec) return 1;
if (ms < qdt2.ms) return -1;
if (ms > qdt2.ms) return 1;
if (mcs < qdt2.mcs) return -1;
if (mcs > qdt2.mcs) return 1;
return 0;
}
public override bool Equals(object obj)
{
var qdt2 = obj as QuikDateTime;
if (qdt2 == null) throw new InvalidCastException();
return CompareTo(qdt2) == 0;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public static bool operator >=(QuikDateTime qdt1, QuikDateTime qdt2)
{
return qdt1.CompareTo(qdt2) != -1;
}
public static bool operator <=(QuikDateTime qdt1, QuikDateTime qdt2)
{
return qdt1.CompareTo(qdt2) != 1;
}
public static bool operator <(QuikDateTime qdt1, QuikDateTime qdt2)
{
return qdt1.CompareTo(qdt2) == -1;
}
public static bool operator >(QuikDateTime qdt1, QuikDateTime qdt2)
{
return qdt1.CompareTo(qdt2) == 1;
}
public static bool operator ==(QuikDateTime qdt1, QuikDateTime qdt2)
{
if (qdt1 == null || qdt2 == null) throw new NullReferenceException();
return qdt1.CompareTo(qdt2) == 0;
}
public static bool operator !=(QuikDateTime qdt1, QuikDateTime qdt2)
{
return !(qdt1 == qdt2);
}
Вместо свойства DateTime пользуюсь парочкой методов расширения DateTime()
public static DateTime DateTime(this QuikDateTime qdt) =>
new DateTime(qdt.year, qdt.month, qdt.day, qdt.hour, qdt.min, qdt.sec, qdt.ms);
public static DateTime DateTime(this Candle qdt) =>
new DateTime(qdt.Datetime.year, qdt.Datetime.month, qdt.Datetime.day, qdt.Datetime.hour, qdt.Datetime.min, qdt.Datetime.sec, qdt.Datetime.ms);
Позволю себе добавить ещё один extension, только на этот раз для стакана
public static DateTime DateTime(this OrderBook orderbook) =>
new DateTime(1970, 1, 1).AddMilliseconds(orderbook.LuaTimeStamp).ToLocalTime();