NSDateFormatter提前一天提供

时间:2014-01-30 11:55:58

标签: ios iphone objective-c

我正在使用下面的代码,但它提前一天给我。

示例:将输入字符串作为“ 2013-08-31T23:59:59-0400 ”传递,输出日期将显示为“ 2013-09 -01 03: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;
}

谢谢。

3 个答案:

答案 0 :(得分:5)

这些是因为时区差异而发生的,请设置适当的时区

-(NSDate *)convertDateFromString:(NSString *)strDate DateFormat:(NSString *)strDateFromat
{
    strDateFromat=@"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;
}

答案 1 :(得分:3)

这可能与TimeZone问题有关 - 是你在UTC或当地时间得到的日期?相应地设置dateFormatter的时区

答案 2 :(得分:3)

这是一个时区问题。设置DateFormatter对象的TimeZone。

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