Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从毫秒到日期时间格式的转换_C#_Datetime - Fatal编程技术网

C# 从毫秒到日期时间格式的转换

C# 从毫秒到日期时间格式的转换,c#,datetime,C#,Datetime,我得到一个字符串,它是这样表示的: string startdatetime = "13988110600000" 我要做的是将这个字符串(毫秒)转换为DateTime变量。这就是我正在做的: double ticks = double.Parse(startdatetime); TimeSpan time = TimeSpan.FromMilliseconds(ticks); DateTime startdate = new DateTime(time.Ticks); 结果几乎不错:我有一

我得到一个字符串,它是这样表示的:

string startdatetime = "13988110600000"
我要做的是将这个字符串(毫秒)转换为DateTime变量。这就是我正在做的:

double ticks = double.Parse(startdatetime);
TimeSpan time = TimeSpan.FromMilliseconds(ticks);
DateTime startdate = new DateTime(time.Ticks);
结果几乎不错:我有一个奇怪的约会,但时间还行(30/04/004518:00:00)


有什么原因吗?

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;
或者干脆

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

原因是您的值基于自
01/01/1900
01/01/1970
以来经过的毫秒数,而C中的日期时间以
01/01/00001
开头

我认为它是从1970年1月1日开始的,因为1970+45年将是2015年,我认为这是您搜索的一年。

由于返回了
long
,您的
新日期时间(time.Ticks)
代码调用和它的文档

以100纳秒间隔表示的日期和时间 自美国0001年1月1日00:00:00.000以来的 公历


这就是为什么说结果几乎是好的是错误的。结果的值应为已实现和记录的值。

距离的毫秒数是多少?它看起来像一个Unix时间戳,因此您希望获得1970年1月1日之后的x毫秒的时间,而不是从0DateTime ts=new DateTime(1970,1,1)开始的时间。add毫秒(x)感谢您的解释。事实上,2014年是我想要的一年,但没关系,你是对的!Iv'e尝试了以下方法:1477484505102结果->10/27/0047 12:21:45 pm由于.NET 4.6(在编写答案时不可用),因此使用
var startdate=DateTimeOffset.fromUnixtimemissions(long.Parse(startdatetime)).UtcDateTime更合适或类似。使用1970年1月1日作为“纪元”的惯例,他们称之为
UnixTime
@JeppeStigNielsen您的评论应该是公认的答案