Ios NSDate自0001年1月1日以来的.NET滴答声
我正在使用一个API,该API以.NET ticks格式返回时间戳,我认为从0001年1月1日起,时间戳的格式为100纳秒。最终得到一个非常大的数字,比如635492330000000(仅从内存中键入)Ios NSDate自0001年1月1日以来的.NET滴答声,ios,objective-c,.net,timestamp,nsdate,Ios,Objective C,.net,Timestamp,Nsdate,我正在使用一个API,该API以.NET ticks格式返回时间戳,我认为从0001年1月1日起,时间戳的格式为100纳秒。最终得到一个非常大的数字,比如635492330000000(仅从内存中键入) 当我从API中得到数字时,它在NSNumber中,但它太大了,无法在32位设备上转换为整数,无法进行数学运算并将其转换为秒。如何将其转换为NSDate?使用long它可以像这样处理大量的数字。您可以从NSSNumber
当我从API中得到数字时,它在NSNumber中,但它太大了,无法在32位设备上转换为整数,无法进行数学运算并将其转换为秒。如何将其转换为NSDate?使用
long
它可以像这样处理大量的数字。您可以从NSSNumber
NSNumber *dateNumber = @(635492330000000); //Your Number
NSDate *date = [NSDate dateWithTimeIntervalSince1970: ([dateNumber longLongValue]-621355968000000L)/10000.0]; //621355968000000L are ticks
这将从0001年1月1日开始计算
这将给出日期为
2014-10-18 12:43:20+0000
,如何将其转换为NSDate
?不,不正确。不行。把长的转换成双的没有意义,你不会得到任何东西。事实上,double甚至可能无法保存long-long中的所有数字。double也可以保存这样的大数字。除法后,它给出的是635492.3299999996
,这要正确得多,因为我们必须在几秒钟内完成,而nsdate给出的是正确的值2001-01-08 08:31:32+0000
不正确。滴答声从0001年1月1日开始计数。参考日期是2001年1月1日。您的数据源不能更改吗?我无法想象一个默认的数据类型能够容纳这么多的数据。你确定你的API从0001年1月1日开始返回刻度,而不是其他参考日期吗?@Aaron经过多次更正后,看到我编辑的答案,它的计算是正确的