Представление DateTime в миллисекундах?
У меня есть метка времени SQL-сервера, которую мне нужно преобразовать в представление времени в миллисекундах с 1970 года. Могу ли я сделать это с помощью простого SQL? Если нет, то я извлек его в DateTime
переменная в C#. Можно ли получить миллисекундное представление этого ?
спасибо,
Тея.
7 ответов:
вы, вероятно, пытаетесь преобразовать в UNIX-подобную метку времени, которая находится в UTC:
yourDateTime.ToUniversalTime().Subtract( new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) ).TotalMilliseconds
Это также позволяет избежать проблем летнего времени, так как UTC не имеет их.
начиная с .NET 4.6, вы можете использовать
DateTimeOffset
объект для получения миллисекунд unix. Он имеет конструктор, который принимаетDateTime
объект, поэтому вы можете просто передать свой объект, как показано ниже.DateTime yourDateTime; long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
как отмечено в других ответах, убедитесь
yourDateTime
правильноKind
указано, или использовать.ToUniversalTime()
чтобы сначала преобразовать его в время UTC.здесь вы можете узнать больше о
DateTimeOffset
.
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000
это не дает вам полной точности, но
DATEDIFF(MS...
вызывает переполнение. Если секунды достаточно хороши, это должно сделать это.
Это другое решение для скрытого datetime для unixtimestampmillis C#.
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long GetCurrentUnixTimestampMillis() { DateTime localDateTime, univDateTime; localDateTime = DateTime.Now; univDateTime = localDateTime.ToUniversalTime(); return (long)(univDateTime - UnixEpoch).TotalMilliseconds; }
используя ответ Андома, это то, что я делаю
Вы можете создать структуру или класс, как этот
struct Date { public static double GetTime(DateTime dateTime) { return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; } public static DateTime DateTimeParse(double milliseconds) { return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime(); } }
и вы можете использовать это в своем коде следующим образом
DateTime dateTime = DateTime.Now; double total = Date.GetTime(dateTime); dateTime = Date.DateTimeParse(total);
Я надеюсь, что это поможет вам
угловое говорит о
date
parater:Andomar-это преобразовать datetime в общей миллисекунды.дата для форматирования либо как объект даты, миллисекунды (строка или число) или различные форматы строк ISO 8601 datetime (например yyyy-MM-ddTHH: mm: ss.sssZ и его более короткие версии, такие как yyyy-MM-ddTHH:mmZ, yyyy-MM-dd или yyyyMMddTHHmmssZ). Если нет часового пояса указанному в строке ввода, то время считается в местный часовой пояс.
и вы должны посмотреть следующие ссылки.
https://docs.angularjs.org/api/ng/filter/date
учитывая объект DateTime, как я могу получить дату ISO 8601 в строковом формате?