Il y a cet exemple de code, mais ensuite il commence à parler de problèmes de milliseconde / nanoseconde.
La même question se pose sur MSDN, Secondes depuis l'époque Unix en C # .
Voici ce que j'ai jusqu'à présent:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
DateTimeOffset.FromUnixTimeSeconds
etDateTimeOffset.ToUnixTimeSeconds
méthodes. Il existe également des méthodes pour la milliseconde unix-time.Réponses:
Voici ce dont vous avez besoin:
Ou, pour Java (qui est différent car l'horodatage est en millisecondes, pas en secondes):
la source
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
etDateTimeOffset.ToUnixMilliseconds
.La dernière version de .NET (v4.6) a ajouté la prise en charge intégrée pour les conversions de temps Unix. Cela inclut le temps vers et depuis Unix représenté par des secondes ou des millisecondes.
DateTimeOffset
:DateTimeOffset
en temps Unix en secondes:DateTimeOffset
:DateTimeOffset
en Unix en millisecondes:Remarque: Ces méthodes convertissent vers et depuis un UTC
DateTimeOffset
. Pour obtenir uneDateTime
représentation, utilisez simplement les propriétésDateTimeOffset.UtcDateTime
ouDateTimeOffset.LocalDateTime
:la source
ToLocalTime
si vous le souhaitez.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
DateTime à l'horodatage UNIX:
la source
De Wikipédia :
Voici donc mon code:
la source
Attention, si vous avez besoin d'une précision supérieure aux millisecondes!
Les méthodes .NET (v4.6) (par exemple FromUnixTimeMilliseconds ) ne fournissent pas cette précision.
AddSeconds et AddMilliseconds coupent également les microsecondes dans le double.
Ces versions ont une grande précision:
Unix -> DateTime
DateTime -> Unix
la source
UnixTimestampToDateTime
, le fourniunixTime
est toujours en quelques secondes, non?Voir IdentityModel.EpochTimeExtensions
la source
DateTime.Ticks
fait qu'Int64 (long), ils évitent donc une distribution supplémentaire non contrôlée.Pour compléter la réponse de ScottCher, je me suis récemment retrouvé dans le scénario ennuyeux d'avoir des horodatages UNIX en secondes et en millisecondes mélangés arbitrairement dans un ensemble de données d'entrée. Le code suivant semble bien gérer cela:
la source
La conversion de l'heure Unix est nouvelle dans .NET Framework 4.6.
Vous pouvez désormais convertir plus facilement les valeurs de date et d'heure vers ou depuis les types .NET Framework et l'heure Unix. Cela peut être nécessaire, par exemple, lors de la conversion de valeurs de temps entre un client JavaScript et un serveur .NET. Les API suivantes ont été ajoutées à la structure DateTimeOffset :
la source
J'ai trouvé la bonne réponse simplement en comparant la conversion au 1/1/1970 sans l'ajustement de l'heure locale;
la source
// 1510396991
// [11.11.2017 10:43:11 +00: 00]
la source
Depuis .net 4.6, vous pouvez faire ceci:
la source
Bien sûr, on peut créer
unixEpoch
une statique globale, il ne doit donc apparaître qu'une seule fois dans votre projet, et on peut l'utiliserAddSeconds
si l'heure UNIX est en secondes.Pour aller dans l'autre sens:
Tronquez en Int64 et / ou utilisez
TotalSeconds
au besoin.la source
A écrit une extension la plus simple qui fonctionne pour nous. Si quelqu'un le cherche ...
la source
la source
Un tick Unix est de 1 seconde (si je me souviens bien), et un tick .NET est de 100 nanosecondes.
Si vous rencontrez des problèmes avec les nanosecondes, vous voudrez peut-être essayer d'utiliser AddTick (valeur 10000000 *).
la source
Je avais besoin de convertir une struct timeval (secondes, microsecondes) contenant
UNIX time
deDateTime
sans perte de précision et n'ont pas trouvé une réponse ici , donc je pensais que je pourrais juste ajouter le mien:la source
Vous pouvez utiliser DateTimeOffset .
Par exemple. J'ai un objet DateTime
Si je veux le convertir en horodatages Unix, je peux être réalisé comme suit
Pour plus d'informations, veuillez visiter ce lien: Méthode DateTimeOffset.ToUnixTimeSeconds
la source
vous pouvez appeler UnixTime.UnixTimeToDateTime (double datetime))
la source
Pour .NET 4.6 et versions ultérieures:
la source