我正在尝试将字符串格式的日期转换为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
任何帮助我如何改变时区将不胜感激。
答案 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];