2013-03-13 82 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]);