从毫秒转换为DateTime格式

时间:2014-04-30 07:12:48

标签: c# datetime

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

string startdatetime = "13988110600000"

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

double ticks = double.Parse(startdatetime);
TimeSpan time = TimeSpan.FromMilliseconds(ticks);
DateTime startdate = new DateTime(time.Ticks);

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

这有什么理由吗?

3 个答案:

答案 0 :(得分:38)

.NET中的

DateTime初始化为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;

或只是

var date = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(startdatetime));

答案 1 :(得分:5)

由于TimeSpan.Ticks property返回long,您的new DateTime(time.Ticks)代码调用DateTime(long) constructor及其文档;

  

以100纳秒间隔的数量表示的日期和时间   自0001年1月1日00:00:00000起已过去   公历

这就是为什么说结果差不多的错误。预期结果的价值已经实施并记录在案。

答案 2 :(得分:4)

原因是您的值基于自01/01/190001/01/1970以来的毫秒数,而C#中的DateTime以01/01/00001开头。

我认为它从01/01/1970开始,因为1970 + 45将是2015年,我认为这是你搜索的那一年。