2014-01-30 41 views
1

我正在使用下面的代码,但它提供了一天的提前日期。NSDateFormatter提前一天提供

:使输入字符串为 “2013-08-31T23:59:59-0400” 和出放日期即将来临为 “2013年9月1日3点59分59秒0000” 。

NSDateFormatter *formatter = [self railsDateFormatter]; 
NSDate *date = [formatter dateFromString:dateString]; 

+(NSDateFormatter*)railsDateFormatter 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZ"]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
    [formatter setLocale:locale]; 
    return formatter; 
} 

谢谢。

+0

你似乎没有提前1天,更像是4小时前。输出时日期格式如何? –

+0

线索是字符串末尾的时区偏移量,首先是'-0400'(4小时后),第二个是'+ 0000'(0小时后)。你已经将本地设置为'en_US_POSIX',这改变了你的时区。根本没有问题 –

+0

如果您不知道YYYY和yyyy之间的区别,则应该使用yyyy。但那只会在1月1日左右。 –

回答

3

这可能与TimeZone问题有关 - 是您获取UTC或当地时间的日期?设置dateFormatter的相应的时区

+0

这不正确。输入字符串包含对应于“Z”格式的*显式时区*“-0400”,因此'setTimeZone:'对字符串日期转换没有影响。 –

+0

啊 - 好的解析将是正确的,不通过时区,但他似乎再次在原来的时区输出日期 - 因此他必须设置输出的时区 – rist

5

。在这些是因为时差,请设置适当的

-(NSDate *)convertDateFromString:(NSString *)strDate DateFormat:(NSString *)strDateFromat 
{ 
    [email protected]"yyyy-MM-dd'T'HH:mm:ss"; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    //chirag::In date day is displayed one less so it can print exact date 
    formatter.timeZone = [NSTimeZone timeZoneWithAbbreviation: @"GMT"]; 
    [formatter setDateFormat:strDateFromat]; 

    NSDate *currentYearDate = [formatter dateFromString:strDate]; 

    return currentYearDate; 
} 
3

它的一个时区的问题时区的发生。设置DateFormatter对象的TimeZone。

[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"GMT"]]; 
+0

这不正确。输入字符串包含对应于“Z”格式的*显式时区*“-0400”,因此'setTimeZone:'对字符串日期转换没有影响。 –