将字符串转换为日期会丢失一个小时

时间:2012-03-28 10:57:41

标签: objective-c timezone nsdate

我正在尝试将字符串格式的日期转换为NSDate,但结果似乎从传入的时间开始减去一个小时。任何想法为什么?

-(NSDate *) convertStringToDate:(NSString *)theString {

    //init formatter
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 

    //setup the formatter
    [dateFormat setDateFormat:@"dd-MM-yyyy HH:mm"];
    [dateFormat setTimeZone:[NSTimeZone localTimeZone]];  

    //cast the date from the string
    NSDate *date = [dateFormat dateFromString:theString];


    [dateFormat release];

    return date;    
}

这是测试电话:

NSDate *testDate = [self convertStringToDate:@"28-03-2012 11:46"];    
NSLog(@"converted test date - %@", testDate);

我得到输出(在我指定为参数的时间之前一小时):

converted test date - 2012-03-28 10:46:00 +0000

任何帮助我如何改变时区将不胜感激。

2 个答案:

答案 0 :(得分:4)

当您NSLog NSDate时,它不会显示在您当地的时区中。它以GMT显示。您当地的时区目前比格林尼治标准时间早1小时(可能因为夏令时)。

要将日期转换为相对于本地时区的字符串,您需要使用日期格式化程序(默认情况下,日期格式化程序的时区将设置为您的本地时区):

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";
NSLog(@"converted test date - %@", [dateFormatter stringFromDate:testDate]);

答案 1 :(得分:1)

由于你的时区,你会看到少一个小时,你需要在得到日期时更改它。

    DateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";

    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:gmt];
    NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
    [dateFormatter release];