88 votes

La représentation de DateTime en millisecondes ?

J'ai un horodatage du serveur SQL que je dois convertir en une représentation du temps en millisecondes depuis 1970. Puis-je le faire en SQL pur ? Sinon, je l'ai extrait dans un fichier DateTime en C#. Est-il possible d'obtenir une représentation en millisecondes de cette variable ?

Merci,
Teja.

160voto

Andomar Points 115404

Vous essayez probablement de convertir un timestamp de type UNIX, qui est en UTC :

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

Cela permet également d'éviter les problèmes liés à l'été, puisque l'UTC n'en connaît pas.

75voto

SLaks Points 391154

En C#, vous pouvez écrire

(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds

41voto

Bob Points 539

À partir de la version 4.6 de .NET, vous pouvez utiliser une balise DateTimeOffset pour obtenir les millisecondes unix. Il a un constructeur qui prend un DateTime vous pouvez donc simplement passer votre objet comme indiqué ci-dessous.

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

Comme indiqué dans d'autres réponses, assurez-vous que yourDateTime a le bon Kind spécifié, ou utiliser .ToUniversalTime() pour le convertir d'abord en heure UTC.

Ici vous pouvez en savoir plus sur DateTimeOffset .

2voto

samsanthosh2008 Points 67

Cette autre solution pour couvrir le datetime à unixtimestampmillis est 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;
}

2voto

SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000

Cela ne vous donne pas une précision totale, mais DATEDIFF(MS... provoque un débordement. Si les secondes sont suffisantes, cela devrait suffire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X