494 votes

Comment convertir le temps d'époque en C# ?

Comment convertir Unix temps de l'époque en temps réel en C# ? (Epoque commençant le 1/1/1970)

761voto

LukeH Points 110965

Je présume que vous voulez dire Temps Unix qui est défini comme le nombre de secondes écoulées depuis minuit (UTC) le 1er janvier 1970.

public DateTime FromUnixTime(long unixTime)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddSeconds(unixTime);
}

246voto

I3arnon Points 9498

Le site la prochaine version de .Net (v4.5.3) ajoute un support intégré pour les conversions de temps Unix. Cela inclut les conversions de et vers le temps Unix représenté par des secondes ou des millisecondes.

  • Temps Unix en secondes pour DateTimeOffset :

    DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);

  • DateTimeOffset au temps Unix en secondes :

    long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();

  • Temps Unix en millisecondes pour DateTimeOffset :

    DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);

  • DateTimeOffset en temps Unix en millisecondes :

    long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();


Remarque : Ces méthodes permettent de convertir les données de et vers DateTimeOffset . Pour obtenir un DateTime utilisent simplement l'option DateTimeOffset.DateTime propriété :

DateTime dateTime = dateTimeOffset.DateTime;

191voto

Ben Cull Points 3588

Avec tout le crédit à LukeH, j'ai rassemblé quelques méthodes d'extension pour une utilisation facile :

public static DateTime FromUnixTime(this long unixTime)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddSeconds(unixTime);
}

public static long ToUnixTime(this DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date - epoch).TotalSeconds);
}

Notez le commentaire ci-dessous de CodesInChaos, selon lequel les éléments ci-dessus FromUnixTime renvoie un DateTime avec un Kind de Utc ce qui est bien, mais l'exemple ci-dessus ToUnixTime est beaucoup plus suspecte dans la mesure où elle ne tient pas compte du type de DateTime les date est. Pour permettre date 's Kind étant soit Utc ou Local utiliser ToUniversalTime :

public static long ToUnixTime(this DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
}

ToUniversalTime convertira un Local (ou Unspecified ) DateTime à Utc .

si vous ne voulez pas créer l'instance DateTime de l'époque lorsque vous passez de DateTime à epoch, vous pouvez également le faire :

public static long ToUnixTime(this DateTime date)
{
    return (date.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}

25voto

Darya Points 125

Vous voulez en fait ajouter des millisecondes(millisecondes), et non des secondes. Ajouter des secondes vous donnera une exception hors de portée.

9voto

Green Su Points 870
// convert datetime to unix epoch seconds
public static long ToUnixTime(DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
}

Il faut utiliser ToUniversalTime() pour l'objet DateTime.

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