创建后的时间以秒为单位转换为可读时间 - Objective-C

时间:2011-09-17 00:14:36

标签: objective-c ios4 timestamp

  

可能重复:
  iPhone: Convert date string to a relative time stamp

我有问题。我已经尝试创建一种方法来获得时间,如“14小时前”,但它似乎没有工作。所以我需要帮助创建一个从创建数据库行/项目开始需要几秒钟的函数。因此,如果db行是在600秒前创建的,这意味着该函数将在“10分钟前”输出?我想让它返回秒,分钟,小时,周,月或年。我知道它可能非常简单,我似乎无法把它弄好......

OH,这适用于iPhone应用程序,因此它使用objective-c。

非常感谢任何帮助。

这就是我当前的目标:

-(NSString *)timeSinceTimestamp:(NSString *)seconds{
   double seconds2 = [seconds doubleValue];
   NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds2];
   NSDate *now = [NSDate date];
   double start = [date timeIntervalSince1970];
   double end = [now timeIntervalSince1970];
   double difference = (end - start) / 1000;
   difference = round(difference);
   int minutes = difference / 60;
   int hours = minutes / 60;
   int days = hours / 24;
   int weeks = days / 7;
   int months = weeks / 5;
   int years = months / 12;
   NSString *string;
   if(difference < 60){
        string = [NSString stringWithFormat:@"%i seconds ago",difference];
   }else if (minutes > 1 && minutes < 60) {
        string = [NSString stringWithFormat:@"%i minutes ago",minutes];
   }else if (hours > 1 && hours < 24) {
       string = [NSString stringWithFormat:@"%i hours ago",hours];
   }else if (days > 1 && days < 7) {
       string = [NSString stringWithFormat:@"%i days ago",days];
   }else if (weeks > 1 && weeks < 5) {
       string = [NSString stringWithFormat:@"%i weeks ago",weeks];
   }else if (months > 1  && months < 12) {
       string = [NSString stringWithFormat:@"%i months ago",months];
   }else if (years > 1 && years < 12) {
       string = [NSString stringWithFormat:@"%i years ago",years];
   }

     return string;
}

2 个答案:

答案 0 :(得分:0)

文档中有Calendrical Calculations的整个部分。

如果您有创建日期 - 并且您有自创建日期以来经过的秒数 - 您可以使用该文档中描述的方法计算新日期。

答案 1 :(得分:0)

计算delta的秒数。使用NSDate dateWithIntervalSince1970或dateWithIntervalSinceReferenceDate从秒值创建NSDate对象。您可以使用NSDateFormatter将该值格式化为小时/分钟/秒。月份和年份将是错误的但是谁在乎呢?

要计算天数和周数,最简单的方法是将秒数除以24 * 60 * 60得到天数,然后除以7得到几周。几个月和几年是一个问题,因为它们是不规则的,所以如果你想要那个级别的分辨率,你可能最好使用日历计算。如果您知道10000秒前创建了某些内容,则可以使用NSDate dateWithTimeIntervalSinceNow(具有负间隔)来生成该较早时间的日期对象。

[顺便说一句,上面的代码似乎大致正确(我没有仔细检查)。我没有看到任何理由让你无法通过一点努力使其发挥作用。]