问题描述
- 转换NSString到NSDate
- 转换两个string值到NSDate,一个日期,一个时间。日期转换正确,但是时间总是转错。并且xcode给出log错误信息。实现转换日期的代码如下,不知道时间怎么转换才对。
NSDate * date;//Assume dateString is populated and of format NSString * dateString =@""2011-11-21 11:20"";NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];NSString *dateString =[NSString stringWithFormat:@""%@ %@"" socialEvent.SocialEventsDC_EventDatesocialEvent.SocialEventsDC_EventStartTime];NSLog(@""%@ %@""socialEvent.SocialEventsDC_EventDatesocialEvent.SocialEventsDC_EventStartTime);[dateFormatter setDateFormat:@""MM/dd/yyyy HH:mm a""];if (dateString != nil) { date = [dateFormatter dateFromString:dateString];// [date release];}NSLog(@""%@""date);
log信息:
2013-04-25 10:45:04.417 BNI UK & Ire[450:5203] 01/20/2015 11:00 PM2013-04-25 10:45:09.679 BNI UK & Ire[450:5203] 2015-01-20 07:00:00 +0000
获得的时间总是7:00:00。正确的结果应该是11:00。
解决方案
你问题问的很好,里面涉及到了人们经常会犯的时区错误,看了下面的代码 你应该会对时区有所了解
如果还疑问可以特别问我,我考虑写一个关于这个时区方面文章解惑
NSDate * date; NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; NSString *dateString = @""01/20/2015 11:00 PM""; NSLog(@""%@"" dateString); //这里有个小错误 // 使用 hh 代替 HH 因为一旦有了 a(AM/PM) 就不应该使用24小时制的HH而要用12小时制的hh,不然转换的时间会不准 [dateFormatter setDateFormat:@""MM/dd/yyyy hh:mm a""]; date = [dateFormatter dateFromString:dateString]; //这个返回的时间是基于GMT+00:00的时间,而我机器是GMT+08:00,所以时间要减8小时是2015-01-20 15:00:00 +0000 NSLog(@""timezone GMT+00:00 time: %@"" date); //使用机器时区打印 date, 这样看到就是对的 NSLog(@""%@"" [date descriptionWithLocale:[NSLocale currentLocale]]); //或者这样也是对的, 用使用默认时区的dateFormatter格式化 date 就会看到和之前一样的时间 NSLog(@""%@"" [dateFormatter stringFromDate:date]); NSLog(@""default timezone:%@"" [NSTimeZone defaultTimeZone]);
运行结果
2013-04-28 00:40:59.889 NoARCTestProject[1123:c07] 01/20/2015 11:00 PM
2013-04-28 00:40:59.892 NoARCTestProject[1123:c07] timezone GMT+00:00 time: 2015-01-20 15:00:00 +0000
2013-04-28 00:40:59.894 NoARCTestProject[1123:c07] Tuesday January 20 2015 11:00:00 PM China Standard Time
2013-04-28 00:40:59.894 NoARCTestProject[1123:c07] 01/20/2015 11:00 PM
2013-04-28 00:40:59.895 NoARCTestProject[1123:c07] default timezone:Asia/Shanghai (GMT+08:00) offset 28800
时间: 2024-10-02 12:31:31