2016-01-29 127 views
-1

我從這個字符串,但每次我從Selected Month問題構建的NSDate

越來越Previous Month使NSDate我無法找到的bug:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 

    [dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]]; 

    [dateFormatter setDateFormat:@"dd/MMM/yyyy"]; 

    NSDate *date = [dateFormatter dateFromString:strDate]; 

    NSLog(@"------Date----%@",date); 

我跟很多Datestrings一些嘗試與日誌是:

strDate =---- 01/Jan/2016 
    ------Date----2015-12-31 18:30:00 +0000 

    strDate =----01/Dec/2015 
    ------Date----2015-11-30 18:30:00 +0000 
+0

是什麼的時區的設備。讓我猜:印度 – vikingosegundo

+0

是@vikingosegundo你是對的..但我已經使用默認時區。這不夠嗎? – Dalvik

+0

當您創建日期時,將考慮您的默認時區。當您直接打印日期時,使用UTC時區 - >差異是5:30。 – vikingosegundo

回答

1

正如海盜說,你所看到的是你的方式的神器播放你的結果日期。當你在NSLog中記錄一個NSDate對象時,它總是以UTC顯示。如果你的日期沒有時間分量,則假定是午夜。如果您的時區在UTC之後,則您的時區中的午夜將顯示爲前一天。

我建議你創建一個顯示日期格式來顯示您產生的日期,並使用:

- (NSString *) displayStringForDate: (NSDate *) date 
{ 
    static NSDateFormatter *dateFormatter; 
    if (dateFormatter == nil) 
    { 
    //This date formatter will default to the current time zone, like you want. 
    dateFormatter = [[NSDateFormatter alloc]init]; 
    //Adjust the date format as desired 
    { 
    return [dateFormatter stringFromDate: date]; 
} 

然後使用該方法,在您的測試代碼:

NSLog(@"------Date----%@", [self displayStringForDate: date]); 
+0

我將它作爲NSDate的類別方法編碼 – vikingosegundo

+0

同意,這將是一個很好的方法來做到這一點。 –