我有一个代表这样的字符串:
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)。
这有什么理由吗?
答案 0 :(得分:38)
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/1900
或01/01/1970
以来的毫秒数,而C#中的DateTime以01/01/00001
开头。
我认为它从01/01/1970
开始,因为1970 + 45将是2015年,我认为这是你搜索的那一年。