can*_*boy 4 iphone objective-c nsdate ios
从像1290529723这样的unix时间戳开始,我将如何(假设gmt)获取有关它是否为的信息:
今天(如果是的话,什么时间)
在过去七天(如果是这样,哪一天......周一,周二等?)
我需要这个消息列表,如iPhone的邮件应用程序,其中日期/时间显示相对于当前日期和时间,如下所示:
15:45
Yesterday
Sunday
Saturday
10/10/10
Run Code Online (Sandbox Code Playgroud)
等等
获得一个尊重设备区域设置的解决方案需要一些小小的尝试.以下方法relativeStringFromDate返回表示日期的字符串,格式如下:
根据当地情况,如果日期超过一周,则只是日期组件(例如,美国的'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;
}
Run Code Online (Sandbox Code Playgroud)正如您和Brad的回答中提到的,您可以使用NSDate的dateWithTimeIntervalSince1970从时间戳中获取NSDate.
| 归档时间: |
|
| 查看次数: |
6067 次 |
| 最近记录: |