From df4b42e5d58eca8ce9d5258535361a3ca6318c35 Mon Sep 17 00:00:00 2001 From: Jan Korf Date: Thu, 9 May 2019 12:58:54 +0200 Subject: [PATCH] Added nanoseconds converter --- .../TimestampNanoSecondsConverter.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 CryptoExchange.Net/Converters/TimestampNanoSecondsConverter.cs diff --git a/CryptoExchange.Net/Converters/TimestampNanoSecondsConverter.cs b/CryptoExchange.Net/Converters/TimestampNanoSecondsConverter.cs new file mode 100644 index 0000000..a617131 --- /dev/null +++ b/CryptoExchange.Net/Converters/TimestampNanoSecondsConverter.cs @@ -0,0 +1,29 @@ +using System; +using Newtonsoft.Json; + +namespace CryptoExchange.Net.Converters +{ + public class TimestampNanoSecondsConverter : JsonConverter + { + public override bool CanConvert(Type objectType) + { + return objectType == typeof(DateTime); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + if (reader.Value == null) + return null; + + var ticksPerNanosecond = (TimeSpan.TicksPerMillisecond / 1000m / 1000); + var nanoSeconds = long.Parse(reader.Value.ToString()); + return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks((long)Math.Round(nanoSeconds * ticksPerNanosecond)); + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var ticksPerNanosecond = (TimeSpan.TicksPerMillisecond / 1000m / 1000); + writer.WriteValue((long)Math.Round(((DateTime)value - new DateTime(1970, 1, 1)).Ticks / ticksPerNanosecond)); + } + } +}