2016-01-29 91 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

同意,这将是一个很好的方法来做到这一点。 –