Comment obtenir un horodatage correct en C #

146

Je voudrais obtenir un horodatage valide dans mon application, alors j'ai écrit:

public static String GetTimestamp(DateTime value)
{
    return value.ToString("yyyyMMddHHmmssffff");
}
//  ...later on in the code
String timeStamp = GetTimestamp(new DateTime());
Console.WriteLine(timeStamp);

production:

000101010000000000

Je voulais quelque chose comme:

20140112180244

Qu'est ce que j'ai mal fait?

Wojciech Ketrzynski
la source

Réponses:

192

Votre erreur utilise new DateTime(), qui renvoie le 1er janvier 0001 à 00: 00: 00.000 au lieu de la date et de l'heure actuelles. La syntaxe correcte pour obtenir la date et l'heure actuelles est DateTime.Maintenant , modifiez ceci:

String timeStamp = GetTimestamp(new DateTime());

pour ça:

String timeStamp = GetTimestamp(DateTime.Now);
ekad
la source
Quel est le contraire? from timestamp to datetime
DanielV
2
@DanielV voir ici: Conversion d'une chaîne en DateTime .
ekad
2
double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp); extrait d' ici
DanielV
44
var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
Mohamed.Abdo
la source
11
Nécessite NET 4.6.
jeromej
7
C'était la réponse pour moi, mais j'ai utiliséToUnixTimeMilliseconds()
Yass
16
var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

Il s'agit d'une autre manière d'individualiser des transactions distinctes. Ce n'est pas l'heure UNIX, mais Windows filetime.

À partir de la documentation :

A Windows file time is a 64-bit value that represents the number of 100- 
nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 
A.D. (C.E.) Coordinated Universal Time (UTC).
Jeff
la source
2
Il serait utile que vous ajoutiez une explication sur la raison pour laquelle votre réponse de code est meilleure que les autres afin que les autres utilisateurs comprennent pourquoi vous utilisez la solution à ce problème. Les réponses au code uniquement ne sont pas si utiles sans une explication.
Brian Tompsett - 汤 莱恩
3
M'aide à obtenir facilement un style d'horodatage pour invalider le cache. +1
Adavo
2
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

"TIME" est l'objet DateTime pour lequel vous souhaitez obtenir l'horodatage unix.

sachin
la source
1

Pour UTC :

string unixTimestamp = Convert.ToString((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);

Pour le système local :

string unixTimestamp = Convert.ToString((int)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
Yousha Aleayoub
la source