2012-11-21 107 views
1

我總是從日期格式化程序中獲得null。我嘗試了所有其他問題的例子,但沒有幫助。在SubmittedDate的定義日期格式化程序返回null

NSLog(@"Date is %@", summaryItem.SubmittedDate); 
NSLog(@"Formatted Date is %@", [df stringFromDate: summaryItem.SubmittedDate ]); 
BOOL isDate = [summaryItem.SubmittedDate isKindOfClass: [NSDate class]]; 
NSLog(@"Date %@ a date.", isDate ? @"is" : @"is not"); 

看你有

@property (nonatomic, retain) NSDate *SubmittedDate; 

我初始化日期Fomatter爲使

- (void) initDateFormatter { 
    if(df == nil) { 
    df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"MM/dd/yyyy"]; 
    [df setDateStyle:NSDateFormatterShortStyle]; 
    } 
} 
  1. 輸出到日誌:
    • 2012-11 -21 10:00:41.650 Mobile_v2 [4093:f803]日期是11/21/2012 10:00:41 AM
    • 2012-11-21 10:00:41.651 Mobile_v2 [4093:f803]格式化日期爲(空)
    • 2012-11-21 10:00:41.681 Mobile_v2 [4093:f803]日期不是日期。

任何人都可以看到有什麼問題嗎?我的日期格式不正確?在我SBJson類

代碼

NSString *newDate = (NSString *)[receivedObjects objectForKey:@"SubmittedDate"]; 
NSDate *submittedDate = [df dateFromString:newDate]; //(NSDate *) 
if ((NSNull *) submittedDate == [NSNull null]) { 
    self.SubmittedDate = nil; 
} else { 
    self.SubmittedDate = submittedDate; 
} 

實際值是 「2012年11月21日上午10點47分54秒」

+1

'setDateFormat'和'setDateStyle'是互斥的。 'setDateStyle'將有效地設置一個內置的日期格式。 –

+0

您還需要設置語言環境。 –

+0

我正在翻譯此值「2012年11月21日10:47:54」,NSDate變爲零。但是如果我使用字符串「11/21/2012」NSDate是有效的。我如何創建一個NSDate並保持時間組件?爲了清晰起見,我在問題中添加了json代碼 –

回答

1

從你的日誌summaryItem.SubmittedDate對象不是類的NSDate 。

第一個日誌的類的對象,

NSLog(@"%@", [summaryItem.SubmittedDate class]); 

如果產量不NSDate的,有在 @property (nonatomic, retain) NSDate *SubmittedDate;被聲明的類的東西錯在實現(.m文件)。

+1

我認爲你的意思是NSLog(@「%@」,[summaryItem.SubmittedDate class]); ? –

+0

當然可以。我編輯它謝謝:) – 8suhas

+0

看到我上面的評論。這個問題似乎是,如果我在字符串中有一個時間組件,它會失敗。 –

0

我不建議你使用NSDateFormatter從字符串轉換日期時解析JSON respnose bacause:

  1. 你必須設置正確的日期格式[DF setDateFormat:@ 「MM/DD/YYYY」] 。
  2. NSDateFormatter非常慢。

而是使用UNIX時間標記(沒有秒從1970年1月1日)和,

-(id)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds 

創建日期的對象。