Objective c 将字符串转换为日期可节省一个小时
我试图将字符串格式的日期转换为NSDate,但是结果似乎从传入的时间中减去了一个小时。你知道为什么吗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 *) 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]);