我从包含格式奇怪的日期的数据库中提取信息。
当他们被拉出时,他们的格式为:
DayOfWeek,月份日期
我正在尝试使用EventKit来选择将日期添加到用户日历。
我似乎无法找到最好的方法来做这件事。
正确方向的任何帮助或观点都会非常>>非常赞赏!!
答案 0 :(得分:3)
您想使用NSDateFormatter
:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEEE, MMMM d";
NSDate *date = [dateFormatter dateFromString:@"Tuesday, March 3"];
答案 1 :(得分:1)
您的问题是此数据库的日期不明确。它没有年份信息。 NSDateFormatters不猜测日期信息。他们根据您提供的信息创建日期。由于缺少这些信息,年份将是1970年(如:与参考数据同年)。
因为数据库中保存的格式完全是愚蠢的,所以我假设这些日期总是在接下来的365天内。所以理论上你不需要保存一年的信息 然后你可以使用这样的东西从完全模糊的日期信息中找出NSDate 我们的想法是将日期从1970年(从您的字符串创建)转移到当前年份。如果今年过去(例如今天是3月31日,“Foo,3月30日”的日期将会过去)将其移至明年。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEEE, MMMM d";
// the following line is important if you want that your code runs on device that are not english!
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSDate *date = [dateFormatter dateFromString:@"Wednesday, March 30"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date];
NSDateComponents *todayComponent = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]];
NSInteger proposedYear = [todayComponent year];
// if supposed date would be in the past for the current year move it into next year
if ([components month] < [todayComponent month]) {
proposedYear++;
}
if ([components month] == [todayComponent month] && [components day] < [todayComponent day]) {
proposedYear++;
}
[components setYear:proposedYear];
date = [calendar dateFromComponents:components];
// just for logging, so you are sure that you use the correct year:
[dateFormatter setDateFormat:@"EEEE, MMMM d yyyy"];
NSLog(@"%@", [dateFormatter stringFromDate:date]);