Cómo obtener la marca de tiempo correcta en C #

146

Me gustaría obtener una marca de tiempo válida en mi aplicación, así que escribí:

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

salida:

000101010000000000

Quería algo como:

20140112180244

¿Qué he hecho mal?

Wojciech Ketrzynski
fuente

Respuestas:

192

Su error es usar new DateTime(), que devuelve el 1 de enero de 0001 a las 00: 00: 00,000 en lugar de la fecha y hora actuales. La sintaxis correcta para obtener la fecha y hora actuales es DateTime . Ahora , cambie esto:

String timeStamp = GetTimestamp(new DateTime());

a esto:

String timeStamp = GetTimestamp(DateTime.Now);
ekad
fuente
¿Qué es al revés? de fecha y hora a fecha y hora
DanielV
2
@DanielV ver aquí: Convertir una cadena a DateTime .
ekad
2
double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp); extraído de aquí
DanielV
44
var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
Mohamed.Abdo
fuente
11
Requiere NET 4.6.
jeromej
77
Esta fue la respuesta para mí, pero solíaToUnixTimeMilliseconds()
Yass
16
var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

Esta es una forma alternativa de individualizar transacciones distintas. No es tiempo de Unix, sino tiempo de archivo de Windows.

De los documentos :

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
fuente
2
Sería útil si agregara alguna explicación de por qué la respuesta de su código es mejor que las demás para que otros usuarios entiendan por qué usar su solución a este problema. Las respuestas de solo código no son tan útiles sin una explicación.
Brian Tompsett -
3
Me ayuda a obtener fácilmente un estilo de marca de tiempo para invalidar el caché. +1
Adavo
2
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

"TIME" es el objeto DateTime para el que desea obtener la marca de tiempo de Unix.

sachin
fuente
1

Para UTC :

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

Para el sistema local :

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