转换两个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_EventDate,socialEvent.SocialEventsDC_EventStartTime];
NSLog(@"%@ %@",socialEvent.SocialEventsDC_EventDate,socialEvent.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 PM
2013-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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。