2013-03-13 84 views
0

我正在从coredata获取日期并尝试获取该日期的工作日。我尝试了下面的代码,但未能正常工作。无法从工作日获得日期

NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init]; 
    [weekDayFormatter setDateFormat:@"EEEE"]; 
    NSDate *weekDay = [results valueForKey:@"date"]; 
    NSLog(@"%@",weekDay);//This log is working. 
    NSString *weekDayString = [weekDayFormatter stringFromDate:weekDay]; 
    NSLog(@"%@",weekDayString); //This log is displaying null. 
    NSLog(@"%@ is spent on %@",[results valueForKey:@"amount"],weekDayString); 

它工作,如果我使用的[NSDate date]代替[results valueForKey:@"date"]

回答

3
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *weekdayComponents =[gregorian components:NSWeekdayCalendarUnit fromDate:dateOfInterest]; 

NSInteger weekday = [weekdayComponents weekday]; 
// weekday 1 = Sunday for Gregorian calendar 

[gregorian release]; 
+0

试过,但我得到一个异常.. 2013年3月13日17:15:24.417 XpenseTracker [14562:C07] - [__ NSArrayI timeIntervalSinceReferenceDate]:无法识别的选择发送到实例0xfa56460 2013-03-13 17:15:24.418 XpenseTracker [14562:c07] ***由于未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSArrayI timeIntervalSinceReferenceDate]:无法识别的选择器发送到实例0xfa56460' – Chandu 2013-03-13 11:46:01

+0

'您正在调用timeIntervalSinceReferenceDate在NSArray而不是NSDate上。这就是为什么例外即将到来。 – 2013-03-13 11:50:36

+0

我不明白,可否请告诉我如何解决它?是因为我使用了谓词吗? – Chandu 2013-03-13 11:54:53

1

尝试使用NSCalendarNSDate中提取NSDateComponents

0

我认为[results valueForKey:@"date"]给出了NSString类型的对象。检查一次。如果它是真的将其转换为NSDate。

案例1:

NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init]; 
    [weekDayFormatter setDateFormat:@"EEEE"]; 
    NSDate *weekDay = @"2013-03-13 11:06:55 +0000";//here warning is there... 
    NSLog(@"%@",weekDay);//This log is working. 
    NSString *weekDayString = [weekDayFormatter stringFromDate:weekDay]; 
    NSLog(@"%@",weekDayString); //It gives NULL... 

在这种情况下,答案是零。

案例2:

NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init]; 
    [weekDayFormatter setDateFormat:@"EEEE"]; 
    NSDate *weekDay = [NSDate date]; 
    NSLog(@"%@",weekDay);//This log is working. 
    NSString *weekDayString = [weekDayFormatter stringFromDate:weekDay]; 
    NSLog(@"%@",weekDayString); //It gives results... 

在这种情况下,答案是yourResult。

+0

NSDateFormatter * weekDayFormatter = [[NSDateFormatter alloc] init]; [weekDayFormatter setDateFormat:@“yyyy-MM-dd HH:mm:ss Z”]; NSDate * weekDayDate = [weekDayFormatter dateFromString:[results valueForKey:@“date”]]; [weekDayFormatter setDateFormat:@“EEEE”]; NSString * weekDayString = [weekDayFormatter stringFromDate:weekDayDate]; NSLog(@“%@”,weekDayString);不工作 – Chandu 2013-03-13 11:36:51

+0

2013-03-13 17:05:46.216 XpenseTracker [14249:c07] - [__ NSArrayI长度]:无法识别的选择器发送到实例0x89db720 2013-03-13 17:05:46.217 XpenseTracker [14249:c07] * **终止应用程序,由于未捕获异常'NSInvalidArgumentException',原因:' - [__ NSArrayI长度]:无法识别的选择器发送到实例0x89db720' – Chandu 2013-03-13 11:37:32

+0

什么是[results valueForKey:@“date”]的返回类型和什么是NSLog [结果valueForKey:@“date”]? – 2013-03-13 11:39:42

0

您必须使用您从[resultsforforKey:@“date”]收到的相同日期格式。此后,您尝试按照需要格式化日期。

NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init]; 
[weekDayFormatter setDateFormat:SAME FORMAT YOU RECEIVING]; 
NSDate *weekDay = [weekDayFormatter dateFromString:[results [email protected]"date"]]; 
NSLog(@"%@",weekDay); 
[weekDayFormatter setDateFormat:@"EEEE"]; 
NSString *weekDayString = [weekDayFormatter stringFromDate:weekDay]; 
0
// Your date as a string 
NSString *yourDate = @"02-09-2011 20:54:18"; // [results valueForKey:@"date"] 

// Prepare an NSDateFormatter to convert to and from the string representation 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

// set format as your Date string (Eg. dd/MM/yyyy for 25/12/2012) 
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"]; 

// Parse the string representation of the date 
NSDate *date = [dateFormatter dateFromString:yourDate]; 

NSDateFormatter* theDateFormatter = [[NSDateFormatter alloc] init]; 
[theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
[theDateFormatter setDateFormat:@"EEEE"]; 
NSString *weekDay = [theDateFormatter stringFromDate:date]; 
NSLog(@"%@",weekDay); 
+0

得到这个异常2013-03-13 17:10:07.095 XpenseTracker [14399:c07] - [__ NSArrayI长度]:无法识别的选择器发送到实例0xfa97e70 2013-03-13 17:10:07.096 XpenseTracker [14399 :c07] ***由于未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSArrayI长度]:无法识别的选择器发送到实例0xfa97e70' – Chandu 2013-03-13 11:40:41

+0

我已测试此代码,它的完美,你的异常是由于一些数组在你的程序中,请找到并修复它。 – 2013-03-22 09:30:29

0
NSDate *today = [NSDate date]; 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *todayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:today]; 

NSLog(@"weekday = %d",[todayComponents weekday]);