转换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];
迅速
NSDate
到Int
// 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。
Int
到NSDate
包括相反的完整性。
// 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)