gpt4 book ai didi

ios - 如何将 NSDate 转换为相对格式 "Today","Yesterday","a week ago","a month ago","a year ago"?

转载 作者:IT老高 更新时间:2023-10-28 11:45:58 25 4
gpt4 key购买 nike

我想将 nsdate 转换为相对格式,例如 "Today","Yesterday","a week ago","a month ago","a year ago","date as it is".

我已经为它写了下面的方法..但是它是如何打印的,因为它是日期..你能告诉我应该是什么问题吗?

//以下是将日期转换为相对字符串的函数

+(NSString *)getDateDiffrence:(NSDate *)strDate{
NSDateFormatter *df = [[NSDateFormatter alloc] init];

df.timeStyle = NSDateFormatterMediumStyle;
df.dateStyle = NSDateFormatterShortStyle;
df.doesRelativeDateFormatting = YES;
NSLog(@"STRING DATEEE : %@ REAL DATE TODAY %@",[df stringFromDate:strDate],[NSDate date]);
return [df stringFromDate:strDate];

}

我有以下格式的日期字符串 "2013-10-29T09:38:00"

当我试图给 NSDate 对象时,它总是返回空日期。
所以我尝试将该日期转换为 yyyy-MM-dd HH:mm:ssZZZZ 然后我将此日期传递给函数然后它只是打印整个日期..

如何解决这个问题?

//下面是我调用上述函数的代码

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSDate *date = [formatter dateFromString:[threadDict objectForKey:@"lastMessageDate"]];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ssZZZZ"];

NSString *date1 = [formatter stringFromDate:date];
NSDate *date_d = [formatter dateFromString:date1];
NSString *resultstr=[UserManager getDateDiffrence:date];

self.dateLabel.text=resultstr;

最佳答案

为简单起见,我假设您格式化的日期都是过去的日期(没有“明天”或“下周”)。不是做不到,而是需要处理更多的案例,返回更多的字符串。


您可以将 components:fromDate:toDate:options: 与您要查找的任何日期组件组合一起使用,以获取两个日期之间的年数、月数、周数、天数、小时数等日期。然后按照从最重要(例如年份)到最不重要(例如天)的顺序遍历它们,您可以仅根据最重要的组件格式化字符串。

例如:1 周 2 天 7 小时前的日期将被格式化为“1 周”。

如果你想为一个单位的特殊数字创建特殊的字符串,比如“明天”代表“1天前”,那么你可以在确定它是最重要的部分后检查该部分的值。

代码如下所示:

- (NSString *)relativeDateStringForDate:(NSDate *)date
{
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitWeekOfYear |
NSCalendarUnitMonth | NSCalendarUnitYear;

// if `date` is before "now" (i.e. in the past) then the components will be positive
NSDateComponents *components = [[NSCalendar currentCalendar] components:units
fromDate:date
toDate:[NSDate date]
options:0];

if (components.year > 0) {
return [NSString stringWithFormat:@"%ld years ago", (long)components.year];
} else if (components.month > 0) {
return [NSString stringWithFormat:@"%ld months ago", (long)components.month];
} else if (components.weekOfYear > 0) {
return [NSString stringWithFormat:@"%ld weeks ago", (long)components.weekOfYear];
} else if (components.day > 0) {
if (components.day > 1) {
return [NSString stringWithFormat:@"%ld days ago", (long)components.day];
} else {
return @"Yesterday";
}
} else {
return @"Today";
}
}

如果您的日期也可能在未来,那么您可以以相同的顺序检查组件的绝对值,然后检查它是正数还是负数以返回适当的字符串。我只显示下面的年份:

if ( abs(components.year > 0) ) { 
// year is most significant component
if (components.year > 0) {
// in the past
return [NSString stringWithFormat:@"%ld years ago", (long)components.year];
} else {
// in the future
return [NSString stringWithFormat:@"In %ld years", (long)components.year];
}
}

关于ios - 如何将 NSDate 转换为相对格式 "Today","Yesterday","a week ago","a month ago","a year ago"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20487465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com