从毫秒转换为DateTime格式

Tra*_*ffy 26 c# datetime

我有一个代表这样的字符串:

string startdatetime = "13988110600000"
Run Code Online (Sandbox Code Playgroud)

我想要做的是将此字符串(毫秒)转换为DateTime变量.这就是我正在做的事情:

double ticks = double.Parse(startdatetime);
TimeSpan time = TimeSpan.FromMilliseconds(ticks);
DateTime startdate = new DateTime(time.Ticks);
Run Code Online (Sandbox Code Playgroud)

结果几乎是好的:我有一个奇怪的约会,但时间还可以(30/04/0045 18:00:00).

这有什么理由吗?

Chr*_*Fin 47

DateTime在.NET中初始化0001-01-01 00:00:00,然后你添加你的TimeSpan,似乎是45年.

这种(毫秒)时间定义的开始是常见的1970-01-01 00:00:00,因此以下可能会给出预期的结果:

double ticks = double.Parse(startdatetime);
TimeSpan time = TimeSpan.FromMilliseconds(ticks);
DateTime startdate = new DateTime(1970, 1, 1) + time;
Run Code Online (Sandbox Code Playgroud)

或者干脆

var date = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(startdatetime));
Run Code Online (Sandbox Code Playgroud)

  • 从.NET 4.6开始(在编写答案时不可用),使用`var startdate = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(startdatetime)).UtcDateTime;`或类似的东西更为漂亮.使用1970年1月1日作为"纪元"的惯例,他们称之为"UnixTime". (12认同)