Comment convertir Unix temps de l'époque en temps réel en C# ? (Epoque commençant le 1/1/1970)
Réponses
Trop de publicités?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);
}
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;
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;
}