Objective c 将字符串转换为日期可节省一个小时

Objective c 将字符串转换为日期可节省一个小时,objective-c,timezone,nsdate,Objective C,Timezone,Nsdate,我试图将字符串格式的日期转换为NSDate,但是结果似乎从传入的时间中减去了一个小时。你知道为什么吗 -(NSDate *) convertStringToDate:(NSString *)theString { //init formatter NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; //setup the formatter [dateFormat setDateForm

我试图将字符串格式的日期转换为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);
我得到输出(比我指定为参数的时间早一个小时):


如果您能帮助我更改时区,我们将不胜感激。

您会发现,由于您的时区,您需要在获得日期后更改它

    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];

当您使用
NSLog
一个
NSDate
时,它不会显示在您的本地时区中。它以GMT显示。您的本地时区当前比GMT早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];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm";
NSLog(@"converted test date - %@", [dateFormatter stringFromDate:testDate]);