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您的评论应该是公认的答案