我的时间跨度跨度数年,并且我希望所有时间分量都从一年到几秒。

我的第一个想法是将时间间隔整数除以一年中的秒数,再减去连续运行的秒数,再除以一个月中的秒数,再减去运行总数,以此类推。

这似乎有些令人费解,并且我读到,每当您做一些看起来令人费解的事情时,可能都有一个内置方法。

在那儿?

我将Alex的第二种方法集成到了我的代码中。

它在我的界面中由UIDatePicker调用的方法中。

NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];

NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;

sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;

NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);

当我将日期选择器设置为过去1年零1天的日期时,我得到:



这是1个月零16个小时的时间。如果我将日期选择器设置为过去的1天,我的退税金额也一样。

更新:我有一个应用程序,可以根据您的生日(通过UIDatePicker设置)来计算您的年龄(以年为单位),但经常会关闭。这证明存在误差,但是我不知道它来自哪里,可以吗?

最佳答案

简介

  • 这是完成JBRWilkinson答案的另一种方法,但添加了一些代码。它还可以为Alex Reynolds的评论提供解决方案。
  • 使用NSCalendar方法:
  • (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
  • “使用指定的组件作为两个NSDateComponents对象,返回两个提供的日期之间的差”。 (来自API文档)。
  • 创建2个NSDate,其区别是要细分的NSTimeInterval。 (如果您的NSTimeInterval来自比较2个NSDate,则不需要执行此步骤,甚至不需要NSTimeInterval,只需将日期应用于NSCalendar方法即可)。
  • 从NSDateComponents获得报价

  • 示例代码
    // The time interval
    NSTimeInterval theTimeInterval = ...;
    
    // Get the system calendar
    NSCalendar *sysCalendar = [NSCalendar currentCalendar];
    
    // Create the NSDates
    NSDate *date1 = [[NSDate alloc] init];
    NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1];
    
    // Get conversion to months, days, hours, minutes
    NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
    
    NSDateComponents *breakdownInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];
    NSLog(@"Break down: %i min : %i hours : %i days : %i months", [breakdownInfo minute], [breakdownInfo hour], [breakdownInfo day], [breakdownInfo month]);
    

    关于iphone - 如何在iPhone上将NSTimeInterval分解为年,月,日,小时,分钟和秒?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1237778/

    10-09 09:59