Представление DateTime в миллисекундах? - PullRequest
65 голосов
/ 11 мая 2011

У меня есть временная метка SQL-сервера, которую мне нужно преобразовать в представление времени в миллисекундах с 1970 года. Могу ли я сделать это с простым SQL?Если нет, я извлек его в переменную DateTime в C #.Можно ли получить это представление в миллисекундах?

Спасибо,Тея.

Ответы [ 7 ]

123 голосов
/ 11 мая 2011

Возможно, вы пытаетесь преобразовать в UNIX-подобную временную метку, которая указана в UTC:

yourDateTime.ToUniversalTime().Subtract(
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    ).TotalMilliseconds

Это также позволяет избежать проблем с летним временем, поскольку в UTC таких нет.

61 голосов
/ 11 мая 2011

В C # вы можете написать

(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
20 голосов
/ 30 июня 2017

Начиная с .NET 4.6, вы можете использовать объект DateTimeOffset для получения Unix-миллисекунд. Он имеет конструктор, который принимает объект DateTime, так что вы можете просто передать свой объект, как показано ниже.

DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();

Как отмечено в других ответах, убедитесь, что в yourDateTime указан правильный Kind, или используйте .ToUniversalTime(), чтобы сначала преобразовать его в UTC.

Здесь вы можете узнать больше о DateTimeOffset.

3 голосов
/ 11 мая 2011
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000

Это не дает вам полной точности, но DATEDIFF(MS... вызывает переполнение.Если секунд достаточно, это должно быть сделано.

2 голосов
/ 20 октября 2016

Это другое решение для скрытой даты и времени в 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;
} 
1 голос
/ 13 мая 2017

Используя ответ Andoma, это то, что я делаю

Вы можете создать Struct или класс, подобный этому

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);

Я надеюсь, что это поможет вам

0 голосов
/ 02 марта 2017

angular говорит о date параметре:

Дата для форматирования либо как объект даты, миллисекунды (строка или число), либо как различные форматы даты-времени ISO 8601 (например, гггг-мм-ддтчч: мм: ss.sssZ и его более короткие версии, такие как гггг-мм-ддтчч: ммз, гггг-мм-дд или ггггMMddTHHmmssZ).Если часовой пояс не указан в строковом вводе, считается, что время находится в местном часовом поясе.

Ответ Andomar преобразует дату и время в общее количество миллисекунд.

И вы должны выглядеть следующим образомссылки.

https://docs.angularjs.org/api/ng/filter/date

Учитывая объект DateTime, как мне получить дату ISO 8601 в строковом формате?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...