Ios 如何在不转换为NSString的情况下格式化NSDate的布局
我希望改变将日期对象放入nsdictionary的方式 当前,日期对象的输入格式如下:Ios 如何在不转换为NSString的情况下格式化NSDate的布局,ios,Ios,我希望改变将日期对象放入nsdictionary的方式 当前,日期对象的输入格式如下: 2014-04-22 17:28:47 +0000 但是,我希望它只能作为 22-04-2014 我尝试使用NSDateFormatter,但我只在将其放入字符串的地方使用过它 NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"dd-MM-yyyy"]; NSString *theD
2014-04-22 17:28:47 +0000
但是,我希望它只能作为
22-04-2014
我尝试使用NSDateFormatter,但我只在将其放入字符串的地方使用过它
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"dd-MM-yyyy"];
NSString *theDate = [formatter stringFromDate:date];
如何简单地将布局从
yyyy-mm-dd-hh:m:ss???
更改为dd-mm-yyy
,但将其作为日期对象进行维护?与OP讨论后,得出结论,以下内容将大大有助于实现预期结果
创建一个如下所示的新类
//FoodItem . h
NSString *foodItemName;
NSString *foodItemDate;
//You can add more stuff like calorie intake etc
//Have a custom init method
-(id)initNewFoodItemName:(NSString*)name withDate:(NSString*)dateInput;
//THEN IN YOUR
//FoodItem.m
//Make sure you Synthesise the properties above.
-(id)initNewFoodItemName:(NSString*)name withDate:(NSString*)dateInput{
if (self = [super init]) {
self.foodItemName = name;
self.foodItemDate = dateInput;
}
return self;
}
这个类是一个数据模型,您将使用它在数据库中存储数据。
如果您没有一个设置,但希望通过测试搜索算法获得乐趣,那么您可以始终创建一个本地临时手动容器,该容器将在程序运行时有效
现在,无论您是想将其存储在临时数据库中,还是使用苹果SQLITE数据库或苹果核心数据数据库存储在本地数据库中;你将能够做一些很棒的事情,比如:
NSMutableArray *temporaryDB = [[NSMutableArray alloc] init];
[temporaryDB addObject:[[FoodItem alloc] initNewFoodItemName:@"Banana" withDate:@"2014-04-20"]];
[temporaryDB addObject:[[FoodItem alloc] initNewFoodItemName:@"Egg" withDate:@"2014-03-20"]];
[temporaryDB addObject:[[FoodItem alloc] initNewFoodItemName:@"chocolate" withDate:@"2014-04-18"]];
然后,当用户选择一个特定日期,因为您希望显示他们在该特定日期吃过的所有食物时,您可以从日期选择器提取日期,使用日期格式化程序将其转换为字符串,然后搜索temporaryDB
数组,查看如果日期匹配,是否返回任何对象,像这样:
-(NSMutableArray*)searchForAllFoodItemsOnACertainDate:(NSString*)searchDate{
NSMutableArray *returnedResults = [[NSMutableArray alloc] init];
for(int i = 0; i < [temporaryDB count]; i++){
FoodItem *currentFoodItem = [temporary objectAtIndex:i];
//if a date is found in the temporary DB then store it into the returnedResults array
if([currentFoodItem.foodItemDate isEqualToString:searchDate]){
[returnedResults addObject:currentFoodItem];
}
}
//In the end you will have a all the food items that were eaten on the day or if none was eaten, then an empty array will be returned with a size of 0
return returnedResults;
}
要记住的事情
您必须确保输入到fooditemsatenonchosendate
搜索函数的日期字符串的格式与您在临时数据库中保存日期的格式相同
Goodluck buddy.日期格式存储日期对象,除非您希望直观地显示它,否则无需调整日期格式,因此格式化程序将其设置应用于字符串,以便您可以以喜欢的方式表示它。这难道不意味着在尝试查找对象时会出现问题吗?如果我试图找到2014年4月22日,它将相当简单,但如果无法格式化它,这意味着date对象中有一个时间元素,我必须引用“22-04-2014 19:09:32”例如..?我猜我也可以改变它第一次输入字典的方式,而不妨碍我所需要的…你不会做像查找
date==searchdate
这样的事情。。相反,您可以通过过滤date
元素来搜索日期,忽略time
元素。如果你能说出你想要达到的目标,也许会更有帮助,这样我才能给出一个更具结论性的回答。另外,请告诉我们您计划如何保存这些日期对象我想您可以,在我的一个项目中,我保留了日期戳的部分,并将其用作字典中的键,然后该字典将链接到包含与该日期相关的所有对象的数组。然后,每当用户选择一个日期时(我有一个很酷的日期滑块,每个点都与一个特定的日期相关联),我都会使用链接到它的日期通过执行返回对象数组的[dateBank objectForKey:userSelectedDateString]
来搜索字典。它工作得很好。例如,此方法允许您使用22-04-2014
进行搜索。
NSMutableArray *foodItemsEatenOnChosenDate = [self searchForAllFoodItemsOnACertainDate:dateFromDatePicker];
if([foodItemsEatenOnChosenDate count] > 0){
//These were the food items eaten on that date the user selected from the date picker
}
else{
//let the user know that they didnt record any food items on that day
}