如何在C#中获取正确的时间戳


146

我想在我的应用程序中获得有效的时间戳,所以我写道:

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

输出:

000101010000000000

我想要类似的东西:

20140112180244

我做错了什么?

Answers:


192

您的错误是使用new DateTime(),它将在00:00:00.000而不是当前日期和时间返回0001年1月1日。获取当前日期和时间的正确语法是DateTime.Now,因此请更改以下内容:

String timeStamp = GetTimestamp(new DateTime());

对此:

String timeStamp = GetTimestamp(DateTime.Now);

怎么回事呢?从时间戳记到日期时间
DanielV

2
@DanielV参见此处:将字符串转换为DateTime
ekad

2
double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp);此处
DanielV


15
var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

这是区分不同交易的另一种方法。不是Unix时间,而是Windows FileTime。

文档

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).

2
如果您添加了关于为什么您的代码答案比其他答案更好的解释,这将有所帮助,以便其他用户可以理解为什么使用您的解决方案来解决此问题。如果没有解释,仅代码答案不是那么有用。
布赖恩·汤普塞特

3
帮助我轻松获取时间戳记样式以使缓存无效。+1
Adavo

2
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

“ TIME”是您要为其获取unix时间戳的DateTime对象。


0

对于UTC

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

对于本地系统

string unixTimestamp = Convert.ToString((int)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.