-3

我有一个方法:

- (NSString *)intervalSinceNow: (NSString *) theDate 
{



NSDateFormatter *date=[[NSDateFormatter alloc] init];
[date setDateFormat:@"yyyy-MM-dd HH:mm "];
NSDate *d=[date dateFromString:theDate];

NSTimeInterval late=[d timeIntervalSince1970]*1;


NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval now=[dat timeIntervalSince1970]*1;
NSString *timeString=@"";

NSTimeInterval cha=now-late;

if (cha/3600<1) {
    timeString = [NSString stringWithFormat:@"%f", cha/60];
    timeString = [timeString substringToIndex:timeString.length-7];
    timeString=[NSString stringWithFormat:@"%@m before", timeString];

}
if (cha/3600>1&&cha/86400<1) {
    timeString = [NSString stringWithFormat:@"%f", cha/3600];
    timeString = [timeString substringToIndex:timeString.length-7];
    timeString=[NSString stringWithFormat:@"%@ hour before", timeString];
}
if (cha/86400>1)
{
    timeString = [NSString stringWithFormat:@"%f", cha/86400];
    timeString = [timeString substringToIndex:timeString.length-7];
    timeString=[NSString stringWithFormat:@"%@ day before", timeString];

}

return timeString;
}

当我打电话给 intervalSinceNow(2012-07-04T00:16:12Z) 前一天给我 15525,如何解决,谢谢?

4

2 回答 2

1

最好不要尝试自己进行这些计算。您不知道本地用户正在使用什么日历系统等等。

在系统上执行所需操作的步骤如下: - 将 ISO8601 日期时间转换为 NSDate 的实例 - 在用户的区域设置和本地时区中显示 NSDate

这些步骤可以通过使用两个NSDateFormatter对象来完成。一个设置将日期时间字符串转换为 NSDate 并为 Zulu 配置,另一个设置为用户当前区域设置和时区的日期格式。默认NSDateFormatter对象已针对用户的当前设置进行了配置。

您需要在代码中做的所有事情都是这样的:

- (NSString*)localDateStringForISODateTimeString:(NSString*)ISOString
{
  // Configure the ISO formatter
  NSDateFormatter* isoDateFormatter = [[NSDateFormatter alloc] init];
  [isoDateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
  [isoDateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

  // Configure user local formatter (configure this for how you want
  // your user to see the date string)
  NSDateFormatter* userFormatter = [[NSDateFormatter alloc] init];
  [userFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

  // Convert the string -- this date can now also just be used
  // as the correct date object for other calculations and/or
  // comparisons
  NSDate* date = [isoDateFormatter dateFromString:ISOString];

  // Return the string in the user's locale and time zone
  return [userFormatter stringFromDate:date];
}

如果您现在打印或显示从此处返回的字符串,您提供的示例字符串“2012-07-04T00:16:12Z”将为我(在纽约)显示为“2012-07-03 20:16”,使用上面的代码。

编辑:我应该注意,上面的代码假设一个 ARC 环境。如果您不使用 ARC,autorelease请在创建两个日期格式化程序时添加消息,否则它们将被泄露。

于 2012-07-04T07:19:59.323 回答
0
NSDateFormatter *date=[[NSDateFormatter alloc] init];
[date setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z' "];
NSDate *d=[date dateFromString:theDate];
NSTimeInterval late=[d timeIntervalSinceNow];

像这样修改这些行,然后重试

于 2012-07-04T07:16:01.783 回答