转换NSDate为整数

所以我的困境是,我不知道如何将date只存储在一个整数值(获取使用:

NSDate* date = [NSDate date] 

我发现这个代码在线,这似乎与我所需要的(我认为改变setDateFormat到@“dd”会工作(但显然它没有)

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy"]; //Optionally for time zone conversions [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]]; NSString *stringFromDate = [formatter stringFromDate:date]; 

我只是忘记了一些简单的整数?

setDateFormat:使用dd setDateFormat:

这将只给date,但在string。

在此之后,您可以在integerValue的帮助下将string转换为整数。

编辑:

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"dd"]; NSString *stringFromDate = [formatter stringFromDate:[NSDate date]]; NSInteger integerDate = [stringFromDate integerValue]; 

迅速

NSDateInt

 // using current date and time as an example let someNSDate = NSDate() // convert NSDate to NSTimeInterval (typealias for Double) let timeInterval = someNSDate.timeIntervalSince1970 // convert to Integer let myInt = Int(timeInterval) 

执行Double to Int转换会导致毫秒丢失。 如果您需要毫秒,则在转换为Int之前乘以1000。

IntNSDate

包括相反的完整性。

 // convert Int to Double let timeInterval = Double(myInt) // create NSDate from Double (NSTimeInterval) let myNSDate = NSDate(timeIntervalSince1970: timeInterval) 

只要我一致,我也可以使用timeIntervalSinceReferenceDate而不是timeIntervalSince1970 。 这是假定时间间隔是以秒为单位的。 请注意,Java使用毫秒。

更新

从Swift 3起,转换将使用Date而不是NSDate 。 请参阅Swift 3版本的答案 。

尽pipe我相信原来的海报只是在寻找date的一部分,但我想象一下,如果给出标题,其他人会想到一个将date转换为规范整数表示的方法(例如,毫秒自时代以来)。

Cocoadate库将date存储为自00:00:00 UTC on 1 January 2001以来的浮点数。

要获得这个值,请调用[NSDate timeIntervalSinceReferenceDate] 。 为了获得Unix纪元以来的秒数(浮点数),调用[NSDate timeIntervalSince1970] 。 要获得毫秒,只需乘以1000。

因此,要获得自Unix时代以来的毫秒数,请使用整数:

(NSInteger)round([NSDate timeIntervalSince1970] * 1000)