Ios NSDate返回小时/天/周
Instagram程序中的快照,日期显示为(例如)2小时前/3天前/1周前。。我有“2013-03-2016:02:48”。。如何获取字符串“2天前”?考虑使用和计算差异,并与最终用户类似地表达。有一个开源项目 根据其文件: 例如,当当前日期时间为2010-12-05 11:30时,则Ios NSDate返回小时/天/周,ios,objective-c,cocoa,nsdate,Ios,Objective C,Cocoa,Nsdate,Instagram程序中的快照,日期显示为(例如)2小时前/3天前/1周前。。我有“2013-03-2016:02:48”。。如何获取字符串“2天前”?考虑使用和计算差异,并与最终用户类似地表达。有一个开源项目 根据其文件: 例如,当当前日期时间为2010-12-05 11:30时,则 ... 2010-12-05 11:00被转换为“30分钟前” ... 2010-12-01 11:00转换为“5天前” ... 2010-12-25 08:00改为“两周内” 也许某个地方有个图书馆可以帮你
... 2010-12-05 11:00被转换为“30分钟前”
... 2010-12-01 11:00转换为“5天前”
... 2010-12-25 08:00改为“两周内”
也许某个地方有个图书馆可以帮你 但这并不难。可以将NSDate分解为其组件。这样就很容易比较它们,并编写一些if-then-else代码来覆盖所有需要的情况 以下是我的一个项目中的一个示例,我正在将日期解析为过去七天内的适当工作日:
NSString *resultDateString;
// First, reduce the two dates we want to compare to the scope of days by erasing hours, minutes and seconds
unsigned int flagA = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *compsA = [[NSCalendar currentCalendar] components:flagA fromDate:myObjectsDate];
[compsA setHour:0];
[compsA setMinute:0];
[compsA setSecond:0];
NSDate *checkDate = [[NSCalendar currentCalendar] dateFromComponents:compsA];
unsigned int flagB = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *partsB = [[NSCalendar currentCalendar] components:flagB fromDate:[NSDate date]];
[compsB setHour:0];
[compsB setMinute:0];
[compsB setSecond:0];
NSDate *nowDate = [[NSCalendar currentCalendar] dateFromComponents:compsB];
// Get the interval between the two dates, interval is still in seconds, but since it is calculated using days only, it will be precisely 0 if the day is the same
NSTimeInterval interval = [searchDate timeIntervalSinceDate:nowDate];
// check if the objects date is today. If it isn't, find out which day it is and name it appropriately
if (interval == 0) {
resultDateString = [NSString stringWithString:@"Today"];
} else {
unsigned int flagC = NSWeekdayCalendarUnit;
NSDateComponents *compsC = [[NSCalendar currentCalendar] components:flagC fromDate:myObjectsDate];
switch ([compsC weekday]) {
case 1:
resultDateString = @"Sunday";
break;
case 2:
resultDateString = @"Monday";
break;
case 3:
resultDateString = @"Tuesday";
break;
case 4:
resultDateString = @"Wednesday";
break;
case 5:
resultDateString = @"Thursday";
break;
case 6:
resultDateString = @"Friday";
break;
case 7:
resultDateString = @"Saturday";
break;
default:
break;
}
}
这只是一个摘录,请注意,这个代码片段并没有检查间隔是否超过7天,例如,因为我在代码中以不同的方式介绍了这些情况。但是我想它会给你一个如何做的基本想法。这个问题与xcode无关,因为如果代码是用xcode、vi编写的,或者是用电报输入的,这并不重要。请仅在需要了解Xcode编辑器本身的情况下使用Xcode标记。NSDateComponents对象,而不是iOS?我已经用这个目标解决了这个问题。所以别傻了,你在说什么?所以你显然没有明白我说的:Xcode是一个编辑器。它用于编写程序,但不是一种编程语言(即objective-c)。它不是与编程语言(即Cocoa/Cocoa Touch)一起使用的类和函数的集合。它不是一个操作系统(即Mac OS X/iOS)。Xcode也不是也不包含NSDATE组件。这属于框架。您可以在任何其他编辑器中使用Objective-C、cocoa touch和NSDateComponents编写iOS程序。这无关紧要。Xcode是不相关的,您的标记会将NoiseOn添加到Xcode标记,这意味着正确标记Xcode的帖子会丢失。所以,请聪明一点,至少聪明一点。开发人员不知道他们的工具是一个负担。很好。但是请注意,如果您只是查找一些实现细节,则其许可证需要attribute.not。不管怎样:在该表扬的地方表扬……我不在乎归因。相反,我的评论是为了提醒大家尊重许可证,因为归属是最容易“忘记”的要求之一。啊,好的。为了本地化,我很乐意在Helvetica Neue all caps 24.0中添加属性。
NSString *resultDateString;
// First, reduce the two dates we want to compare to the scope of days by erasing hours, minutes and seconds
unsigned int flagA = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *compsA = [[NSCalendar currentCalendar] components:flagA fromDate:myObjectsDate];
[compsA setHour:0];
[compsA setMinute:0];
[compsA setSecond:0];
NSDate *checkDate = [[NSCalendar currentCalendar] dateFromComponents:compsA];
unsigned int flagB = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *partsB = [[NSCalendar currentCalendar] components:flagB fromDate:[NSDate date]];
[compsB setHour:0];
[compsB setMinute:0];
[compsB setSecond:0];
NSDate *nowDate = [[NSCalendar currentCalendar] dateFromComponents:compsB];
// Get the interval between the two dates, interval is still in seconds, but since it is calculated using days only, it will be precisely 0 if the day is the same
NSTimeInterval interval = [searchDate timeIntervalSinceDate:nowDate];
// check if the objects date is today. If it isn't, find out which day it is and name it appropriately
if (interval == 0) {
resultDateString = [NSString stringWithString:@"Today"];
} else {
unsigned int flagC = NSWeekdayCalendarUnit;
NSDateComponents *compsC = [[NSCalendar currentCalendar] components:flagC fromDate:myObjectsDate];
switch ([compsC weekday]) {
case 1:
resultDateString = @"Sunday";
break;
case 2:
resultDateString = @"Monday";
break;
case 3:
resultDateString = @"Tuesday";
break;
case 4:
resultDateString = @"Wednesday";
break;
case 5:
resultDateString = @"Thursday";
break;
case 6:
resultDateString = @"Friday";
break;
case 7:
resultDateString = @"Saturday";
break;
default:
break;
}
}