You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Converters;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Helpers.Converters
|
|
|
|
|
{
|
|
|
|
|
public class EpochDateTimeConverter : DateTimeConverterBase
|
|
|
|
|
{
|
|
|
|
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
long ticks;
|
|
|
|
|
if (value is DateTime)
|
|
|
|
|
{
|
|
|
|
|
var epoch = new DateTime(1970, 1, 1);
|
|
|
|
|
var delta = ((DateTime)value) - epoch;
|
|
|
|
|
if (delta.TotalSeconds < 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentOutOfRangeException("value",
|
|
|
|
|
"Unix epoc starts January 1st, 1970");
|
|
|
|
|
}
|
|
|
|
|
ticks = (long)delta.TotalSeconds;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("Expected date object value.");
|
|
|
|
|
}
|
|
|
|
|
writer.WriteValue(ticks);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
|
|
|
|
{
|
|
|
|
|
if (reader.TokenType != JsonToken.Integer)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception(
|
|
|
|
|
String.Format("Unexpected token parsing date. Expected Integer, got {0}.",
|
|
|
|
|
reader.TokenType));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var ticks = (long)reader.Value;
|
|
|
|
|
|
|
|
|
|
var date = new DateTime(1970, 1, 1);
|
|
|
|
|
date = date.AddSeconds(ticks);
|
|
|
|
|
|
|
|
|
|
return date;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|