如何显示时间'刚才' ' 1分钟前' ' 1小时前'分别

时间:2015-01-29 14:42:30

标签: ios nsdate nsdateformatter nsdatecomponents

我在全球范围内开发应用程序,功能是我需要将发布时间分别显示为“刚刚”,“1分钟前”,“1小时前”。我在创建帖子时发送日期和时间并发送到webservice.And检索每个帖子的相同日期时间,我需要在每个帖子上显示相对时间(刚才,1小时,1周)。我是从webservice获取实际日期为
“created_date”=“2015-01-29 06:33:02”; 但是当我解析为Nsdate格式时,它将日期返回为 “2015-01-29 01:03:02 +0000”  这是发送服务器的日期和时间代码。

 NSDateFormatter *DateFormatter=[[NSDateFormatter alloc] init];

[DateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"DateFormatter%@",[DateFormatter stringFromDate:[NSDate date]]);

以下代码我用来格式化字符串到目前为止。

 NSDateFormatter* dateFormatter = [[NSDateFormatter alloc]init];

 dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  NSDate *date = [dateFormatter dateFromString:[value valueForKey:@"created_date"]];
  NSLog(@"Output :%@",date);

如何找到分享后的实际时间。我是客观的新手C.我不确定我做错了什么。请有人帮我解决。

1 个答案:

答案 0 :(得分:3)

看起来这里有两个问题。

第一个是关于自然语言日期格式,我认为您可能会发现this相关。

第二个问题看起来你对时区感到困惑。 NSDate将解析您的日期,假设GMT没有任何偏移或ICU时区规范的指示。然后,当您将其打印出来时,可能会使用机器的当前区域设置来格式化输出日期。您应该阅读NSDate和NSDateFormatter对时区的处理。

将日期作为字符串发送到服务器时,您应该将其格式化为:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

// Special, agnostic locale
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:locale];

// GMT
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[dateFormatter setTimeZone:timeZone];

// ISO 8601
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];

NSLog(@"DateFormatter%@",[dateFormatter stringFromDate:[NSDate date]]);