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

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

我做错了什么?


当前回答

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

其他回答

var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

这是对不同事务进行个性化的另一种方法。不是unix时间,而是windows文件时间。

从文档中可以看出:

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

您的错误在于使用了new DateTime(),它返回1月1日0001的00:00:00.000,而不是当前的日期和时间。获取当前日期和时间的正确语法是DateTime。现在,改变这个:

String timeStamp = GetTimestamp(new DateTime());

:

String timeStamp = GetTimestamp(DateTime.Now);

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);
var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

"TIME"是你想获取unix时间戳的DateTime对象。