166 votes

Comment puis-je convertir un DateTime pour le nombre de secondes depuis 1970?

Je suis en train de convertir un C# la variable DateTime à temps Unix, c'est à dire le nombre de secondes depuis le 1er janvier 1970. Il ressemble à un DateTime est effectivement mis en œuvre comme le nombre de "tiques" depuis le 1er janvier 0001.

Ma pensée est de soustraire le 1er janvier 1970 à partir de mon DateTime comme ceci:


TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;

Est-il un meilleur moyen?

242voto

Dave Swersky Points 25958

C'est principalement ça. Ce sont les méthodes que j'utilise pour convertir vers et depuis l'époque Unix temps:

public static DateTime ConvertFromUnixTimestamp(double timestamp)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return origin.AddSeconds(timestamp);
}

public static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    TimeSpan diff = date.ToUniversalTime() - origin;
    return Math.Floor(diff.TotalSeconds);
}

23voto

CaffGeek Points 10925

La seule chose que je vois, c'est que c'est censé être depuis Minuit le 1er janvier 1970 UTC

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc));
return span.TotalSeconds;

18voto

David Points 2491

Vous voudrez probablement utiliser DateTime.UtcNow pour éviter le problème de fuseau horaire

TimeSpan span= DateTime.UtcNow.Subtract(new DateTime(1970,1,1,0,0,0)); 

1voto

supercat Points 25534

Cette approche sera bon, si la date en temps en question est en UTC, ou représente, heure locale, dans une région qui n'a jamais observé de l'heure d'été. La date / heure différence routines ne tiennent pas compte de l'Heure d'été, et, par conséquent, sera quant à minuit le 1er juin comme étant un multiple de 24 heures après minuit le 1er janvier. Je suis pas au courant de quoi que ce soit dans Windows que les rapports historiques de l'heure d'été règles pour les paramètres régionaux en cours, donc je ne pense pas qu'une bonne façon de gérer correctement tout moment avant la plus récente de la lumière-économie de modifier la règle.

0voto

Alec Sanger Points 1848

Vous pouvez créer un startTime et endTime de DateTime, puis faire endTime.Soustraire(startTime). Puis à la sortie de votre portée.Secondes.

Je pense que cela devrait fonctionner.

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