public static void Main()
string json = "{ \"created\": 1414763125 }";
var alert = JsonConvert.DeserializeObject<Alert>(json);
Console.WriteLine(alert.Created.ToString("s"));
public class UnixTimestampJsonConverter : JsonConverter
public override object ReadJson(
JsonSerializer serializer)
long ts = serializer.Deserialize<long>(reader);
return TimeUtils.GetMbtaDateTime(ts);
public override bool CanConvert(Type type)
return typeof(DateTime).IsAssignableFrom(type);
public override void WriteJson(
JsonSerializer serializer)
throw new NotImplementedException();
public override bool CanRead
[JsonConverter(typeof(UnixTimestampJsonConverter))]
public DateTime Created { get; set; }
static readonly DateTimeZone mbtaTimeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static DateTime GetMbtaDateTime (long unixTimestamp)
var mbtaEpochTime = epoch.AddSeconds (unixTimestamp);
var instant = Instant.FromUtc (mbtaEpochTime.Year, mbtaEpochTime.Month,
mbtaEpochTime.Day, mbtaEpochTime.Hour, mbtaEpochTime.Minute);
var nodaTime = instant.InZone (mbtaTimeZone);
return nodaTime.ToDateTimeUnspecified ();