我试图找出我们现在有多少毫秒。我找不到以毫秒为单位返回时间而忽略日期的方法,所以我想我可以根据 timeIntervalSince 1970 方法返回的值来计算它。
我这样做了:
NSLog(@"%f", [[NSDate date] timeIntervalSince1970]);
2013-05-21 16:29:09.453 TestApp[13951:c07] 1369171749.453490
现在我的假设是,因为86,400 seconds
在一天之内,我可以将这个值除以86400
并得到自 1970 年以来已经过去了多少天。这样做会给我15846.8952483 days
. 现在,如果我的假设成立,我已经89.52483%
度过了这一天。所以 multiple24 hours by 86.52659%
会给我一个当前时间的21.4859592 hour
or about 09:29 PM
。正如你所看到的,NSLog
这距离实际时间大约 5 小时,但我相信返回的时间间隔GMT
会比我的时区早 5 小时。
所以我想,这到底是怎么回事,我会顺其自然,看看会发生什么。
我通过以下方式去掉小数位:
float timeSince1970 = [[NSDate date] timeIntervalSince1970]/86400.0;
timeSince1970 = timeSince1970 - (int)timeSince1970
然后计算今天到目前为止发生的毫秒数:
int timeNow = timeSince1970 * 86400000;
NSLog(@"%i", timeNow);
2013-05-21 16:33:37.793 TestApp[14009:c07] 77625000
然后我将毫秒(这似乎仍然合适)转换为NSDate
:
NSString *timeString = [NSString stringWithFormat:@"%d", timeNow];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"A"]
NSDate *dateNow = [dateFormatter dateFromString:timeString];
NSLog(@"%@", dateNow);
2013-05-21 16:29:09.455 TestApp[13951:c07] 2000-01-02 03:29:00 +0000
还有我的问题。它不是返回一个2000-01-01
附有几个小时和分钟的日期,而是返回一个2000-01-02
日期。为什么!?
编辑
我通过“删除”我在上面提到的额外 5 个小时来让它工作:
int timeNow = (timeSince1970 * 86400000) - (5 * 60 * 60 * 1000);
我不明白为什么这是必要的。如果有人可以解释,我将不胜感激。
编辑 2
也许我应该问一个关于如何完成我想要完成的任务的更基本的问题。我关心时间(例如,下午 4 点很重要,但我不太关心日期)。我一直将这些存储在由以下人员创建的 NSDates 中:
[dateFormatter setDateFormat:@"hh:mm a"];
[dateFormatter dateFromString@"04:00 PM"];
这一切似乎进展顺利。现在我想将当前时间与我保存的时间进行比较,看看它是 NSOrderedAscending 还是 NSOrderedDescending 并做出相应的响应。有没有更好的方法来实现这一点?