J'ai regardé stackoverflow, et même regardé certaines des questions suggérées et aucune ne semble répondre, comment obtenir un horodatage Unix en C #?
c#
timestamp
unix-timestamp
bizzehdee
la source
la source
Réponses:
Vous obtenez un horodatage Unix en C # en utilisant
DateTime.UtcNow
et en soustrayant l'heure de l'époque du 01/01/1970.par exemple
DateTime.UtcNow
peut être remplacé par n'importe quelDateTime
objet pour lequel vous souhaitez obtenir l'horodatage unix.Il y a aussi un champ,
DateTime.UnixEpoch
qui est très mal documenté par MSFT, mais peut se substituer ànew DateTime(1970, 1, 1)
la source
DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks / TimeSpan.TicksPerSecond;
Depuis .NET 4.6, il y en a
DateTimeOffset.ToUnixTimeSeconds()
.Il s'agit d'une méthode d'instance, vous devez donc l'appeler sur une instance de
DateTimeOffset
. Vous pouvez également caster n'importe quelle instance deDateTime
, mais méfiez-vous du fuseau horaire .Pour obtenir l'horodatage actuel:
Pour obtenir l'horodatage d'un
DateTime
:la source
Int64
- au moment où cela se produit, nous n'utiliserions plus les années terrestres faute de Terre.DateTimeOffset.Now.ToUnixTimeSeconds()
Vous pouvez également utiliser des ticks. Je code pour Windows Mobile, je n'ai donc pas l'ensemble complet de méthodes. TotalSeconds n'est pas disponible pour moi.
ou
la source
new DateTime(1970, 1, 1)
crée un temps avec uneKind
propriété non spécifiée . Ce que vous voulez vraimentnew DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
être vraiment correctVoici ce que j'utilise:
Gardez à l'esprit que cette méthode renvoie l'heure en temps universel coordonné (UTC).
la source
double
type; le lancer trop longtemps entraînera une perte de précision.)La troncature
.TotalSeconds
est importante car elle est définie commethe value of the current System.TimeSpan structure expressed in whole fractional seconds.
Et que diriez-vous d'une extension pour
DateTime
? Le second est probablement plus déroutant qu'il vaut jusqu'à ce que les extensions de propriété existent.la source
Lorsque vous soustrayez 1970 de l'heure actuelle, sachez que l'intervalle de temps aura le plus souvent un champ non nul en millisecondes. Si pour une raison quelconque vous êtes intéressé par les millisecondes, gardez cela à l'esprit.
Voici ce que j'ai fait pour contourner ce problème.
la source
C'est ce que j'utilise.
la source
J'ai épissé les approches les plus élégantes de cette méthode utilitaire:
la source
Cette solution a aidé dans ma situation:
en utilisant helper dans le code:
la source
Il existe un ToUnixTimeMilliseconds pour DateTimeOffset dans le système
Vous pouvez écrire une méthode similaire pour DateTime:
10000000L - conversion des ticks en secondes
62135596800L - conversion du 01.01.01 au 01.01.1978
Il n'y a pas de problème avec Utc et les fuites
la source
Voici une classe d'extension à 2 voies qui prend en charge:
Dans le cas d'OP, l'utilisation est:
ou
Même s'il existe une réponse directe, je pense qu'il est préférable d'utiliser une approche générique. Surtout parce que c'est probablement un projet qui a besoin d'une conversion comme celle-ci, aura également besoin de ces extensions, il est donc préférable d'utiliser le même outil pour tous.
la source
Je l'ai utilisé après avoir lutté pendant un certain temps, il répond également au décalage du fuseau horaire:
la source
Le code simple que j'utilise:
Ce code donne l'horodatage Unix, millisecondes totales du 1970-01-01 à maintenant.
la source