我试图从UIDatePicker获取NSDate,但它不断返回一个约20秒的日期时间.如何手动设置NSDate的第二个为零?
解决方法
NSDate是不可变的,所以你不能修改它的时间.但是,您可以创建一个新的日期对象,它可以捕捉到最近的分钟:
NSTimeInterval time = floor([date timeIntervalSinceReferenceDate] / 60.0) * 60.0; NSDate *minute = [NSDate dateWithTimeIntervalSinceReferenceDate:time];
编辑回答Uli的评论
NSDate的参考日期是2001年1月1日,格林尼治标准时间0:00.从那时起,已经有了两个闰秒:2005和2010,所以由[NSDate timeIntervalSinceReferenceDate]返回的值应该被关闭两秒钟.
情况并非如此:timeIntervalSinceReferenceDate与墙壁时间完全同步.
在回答这个问题时,我并没有确定这是真的.我刚刚认为Mac OS将会在behave as UNIX time(1970 epoch)上做到:POSIX保证每天的启动时间为86,400秒.
看看从NSDate返回的值,这个假设似乎是正确的,但是肯定会很高兴找到一个明确的(记录的)声明.