从像 1290529723 这样的 unix 时间戳开始,我将如何(假设 gmt)获取关于它是否是的信息:
今天(如果是,什么时间)
在过去的 7 天内(如果是,那一天……周一, 星期二等?)
- 超过一周(如果是,如何以 dd/mm/yy 输出 格式?)
我需要一个消息列表,例如 iPhone 的邮件应用程序,其中日期/时间相对于当前日期和时间显示,如下所示:
15:45
Yesterday
Sunday
Saturday
10/10/10
等等
最佳答案
获得尊重设备区域设置的解决方案需要一些小技巧。以下方法 relativeStringFromDate 返回表示日期的字符串,格式如下:
- 如果日期是今天,则只显示时间,根据语言环境(例如“3:40PM”或“15:40”)
- 如果日期是昨天,则为“昨天”(但会国际化为区域设置的语言)
- 星期几的名称,如果日期是两到六天前(例如“星期一”、“星期二”等,同样根据区域设置的语言)
如果日期超过一周前,则仅包含日期部分,具体取决于区域设置(例如,美国为“1/20/2012”,欧洲为“20/1/2012”)
- (NSString *)relativeStringFromDate:(NSDate *)date { if ([self dateIsToday:date]) return [self dateAsStringTime:date]; else if ([self dateIsYesterday:date]) return [self dateAsStringDate:date]; else if ([self dateIsTwoToSixDaysAgo:date]) return [self dateAsStringDay:date]; else return [self dateAsStringDate:date]; } - (BOOL)date:(NSDate *)date isDayWithTimeIntervalSinceNow:(NSTimeInterval)interval { NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd"]; NSDate *other_date; other_date = [NSDate dateWithTimeIntervalSinceNow:interval]; NSString *d1, *d2; d1 = [df stringFromDate:date]; d2 = [df stringFromDate:other_date]; return [d1 isEqualToString:d2]; } - (BOOL)dateIsToday:(NSDate *)date { return [self date:date isDayWithTimeIntervalSinceNow:0]; } - (BOOL)dateIsYesterday:(NSDate *)date { return [self date:date isDayWithTimeIntervalSinceNow:-86400]; } - (BOOL)dateIsTwoToSixDaysAgo:(NSDate *)date { for (int i = 2; i <= 6; i += 1) if ([self date:date isDayWithTimeIntervalSinceNow:i*-86400]) return YES; return NO; } - (NSString *)dateAsStringDate:(NSDate *)date { NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateStyle:NSDateFormatterShortStyle]; [df setDoesRelativeDateFormatting:YES]; NSString *str = [df stringFromDate:date]; return str; } - (NSString *)dateAsStringTime:(NSDate *)date { NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setTimeStyle:NSDateFormatterShortStyle]; NSString *str = [df stringFromDate:date]; return str; } - (NSString *)dateAsStringDay:(NSDate *)date { NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"EEEE"]; NSString *str_day = [df stringFromDate:date]; return str_day; }
如您和 Brad 的回答中所述,您可以使用 NSDate 的 dateWithTimeIntervalSince1970 从时间戳中获取 NSDate。
关于iphone - 从 unix 时间戳获取人类可读的相对时间和日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260558/