web-dev-qa-db-fra.com

Représentation de DateTime en millisecondes?

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

Merci, 
Teja.

59

Vous essayez probablement de convertir en un horodatage de type UNIX, qui sont au format UTC:

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

Cela évite également les problèmes d’été, car UTC n’en a pas.

111
Andomar

En C #, vous pouvez écrire

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

A partir de .NET 4.6, vous pouvez utiliser un objet DateTimeOffset pour obtenir les millisecondes unix. Il a un constructeur qui prend un objet 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 bien spécifié Kind ou utilisez .ToUniversalTime() pour le convertir d'abord en heure UTC.

Ici vous pouvez en apprendre davantage sur DateTimeOffset.

18
Bob
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 suffisent, cela devrait le faire.

3
user565869

Cette autre solution pour convertir datetime en timestamp unix millis 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;
} 
2
samsanthosh2008

En utilisant la réponse de Andoma, voici ce que je fais

Vous pouvez créer une structure ou une classe comme celle-ci

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

    }

Et vous pouvez utiliser ceci dans votre code comme suit

DateTime dateTime = DateTime.Now;

double total = Date.GetTime(dateTime);

dateTime = Date.DateTimeParse(total);

J'espère que cela vous aide

1
Pablo V

angular dit à propos de date parater:

Date à formater en tant qu'objet Date, millisecondes (chaîne ou nombre) ou divers formats de chaîne datetime ISO 8601 (par exemple, aaaa-MM-jjTHH: mm: ss.sssZ et ses versions plus courtes telles que aaaa-MM-jjTHH: mmZ, aaaa-MM-jj ou aaaaMMjjHHmmssZ). Si aucun fuseau horaire n'est spécifié dans l'entrée de chaîne, l'heure est considérée comme étant dans le fuseau horaire local.

La réponse d'Andomar est la date/heure convertie en millisecondes.

Et vous devriez regarder les liens suivants.

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

Étant donné un objet DateTime, comment puis-je obtenir une date ISO 8601 au format chaîne?

0
ddagsan