如何分别显示“刚刚”“1分钟前”“1小时前”时间

Posted

技术标签:

【中文标题】如何分别显示“刚刚”“1分钟前”“1小时前”时间【英文标题】:How to display time 'just now' '1 minute ago' '1 hour ago' respectively 【发布时间】:2015-01-29 14:42:29 【问题描述】:

我正在开发一个全球应用程序,功能是我需要将发布的时间分别显示为“刚刚”、“1 分钟前”、“1 小时前”。我在创建帖子并发送到网络服务时发送日期和时间。我为每个帖子检索相同的日期时间,我需要在每个帖子上显示相对时间(分别是现在、1 小时、1 周)。我是从 web 服务获取实际日期为 "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);

如何找到帖子共享的实际时间。我是 Objective C 的新手。我不确定我做错了什么。请任何人帮我解决它。

【问题讨论】:

你在印度吗?由于created_date 和您解析的日期之间存在 5:30 的差异,我推测这两个时间是在同一时间面对的,只是在世界不同的地方。 【参考方案1】:

这里似乎有两个问题。

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

第二个问题看起来您对时区有些困惑。假设 GMT 没有任何偏移量或 ICU 时区规范的指示,NSDate 将解析您的日期。然后,当您将其打印出来时,它可能会使用您机器的当前语言环境来格式化输出日期。您应该阅读 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]]);

【讨论】:

感谢您的建议,有没有什么方法可以在没有日期格式的情况下获得实际时间。 我不知道你在问什么... NSDateFormatter 可以配置一个语言环境、一个时区和一个格式字符串,因此应该能够完美地只显示时间部分NSDate,同时正确考虑了特定时区。 对不起,让我解释一下,如果我发布了一些内容,它会显示为我刚刚发布的内容。如果我在 2 小时前发布了内容,它应该显示为 2 小时前。我从 web 服务获取发布日期作为字符串.我不知道如何从发布时间转换为当地时间。 好的,我明白了这个问题,NSDateFormatter 仍然是答案。您可能需要跳过一些环节,具体取决于服务器存储日期的方式(即服务器是在 GMT 中为您提供日期?还是在其他时区?)典型地,NSDates 存储为相对于 GMT 的时间点,所以在将服务器响应解析为 NSDate 时,您需要将服务器为您提供的任何内容转换为 GMT。 我没有获取服务器时间,而是从设备发送时间以及发布 Web 服务参数。因此,我得到的时间与我为每个具有创建时间的帖子发送给他们的时间相同。跨度>

以上是关于如何分别显示“刚刚”“1分钟前”“1小时前”时间的主要内容,如果未能解决你的问题,请参考以下文章

像 *** 一样格式化 DateTime [重复]

有关Oracle 查询时间的记录

关于C#获取动态的时间差函数

查找 1 小时前创建的文件

如何判断服务器的负载是不是过高

如何从 iOS swift 中的日期获取 1 小时前?