Вычисление миллисекунд с 1970 года в C# дает другую дату, чем JavaScript
мне нужно вычислить JavaScript методов gettime метод в C#.
для простоты я выбрал фиксированную дату в UTC и сравнил C#:
C#
DateTime e = new DateTime(2011, 12, 31, 0, 0, 0, DateTimeKind.Utc);
DateTime s = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan t = (e - s);
var x = t.TotalMilliseconds.ToString();
=> 1325289600000
и результаты JavaScript:
JavaScript
var d = new Date(2011, 12, 31, 0, 0, 0)
var utcDate = new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds());
utcDate.getTime()
=> 1327960800000
никаких намеков на то, что я делаю неправильно?
спасибо!
3 ответов
если вы имели в виду, что вход должен быть в UTC, вы должны делать это вместо этого:
var ts = Date.UTC(2011,11,31,0,0,0);
как указал Слакс, месяцы работают 0-11, но даже тогда-вы должны инициализировать дату как UTC, если хотите получить ответ в UTC. В вашем коде вы инициализировали местные дата, а потом преобразование это в UTC. Результат будет отличаться в зависимости от часового пояса компьютера, на котором выполняется код. С Date.UTC
, вы получаете метку - не а Date
object, и это будет тот же результат независимо от того, где он работает.
из консоли отладки Chrome:
это то же самое значение, возвращенное из вашего .NET-кода, который выглядит просто отлично, за исключением того, что я бы вернул long
, а не string
.
дата JS ошибочна, я считаю. Опустить var utcDate
строка и вывод просто d.getTime()
время между двумя датами, независимо от часового пояса и смещение. Часовые пояса относительно фактического момента времени, так ли вы называете .getTime()
на UTC или est или PST дата, это будет то же самое относительно 1970-1-1 того же часового пояса.
2011-12-31 EST - 1970-1-1 EST
== 2011-12-31 PST - 1970-1-1 PST
== 2011-12-31 UTC - 1970-1-1 UTC
EDIT: в @Slaks выше, вы также не используете месяц на основе 0 (который я также понятия не имел о.)