В данный момент вы звоните ToUniversalTime()
- просто избавьтесь от этого:
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.Ticks - 621355968000000000) / 10000000;
return epoch;
}
В качестве альтернативы, и более читабельно ИМО:
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
...
private static long ConvertToTimestamp(DateTime value)
{
TimeSpan elapsedTime = value - Epoch;
return (long) elapsedTime.TotalSeconds;
}
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, Kind
из DateTime
, который вы передаете, не учитывается при выполнении вычитания. Вы должны действительно передать значение с Kind
из Utc
, чтобы это работало. К сожалению, DateTime
немного сломан в этом отношении - см. мой пост в блоге (разглагольствование о DateTime
) для более подробной информации.
Возможно, вы захотите использовать мой Noda Time API даты / времени вместо этого, что делает все более понятным, ИМО.