开发者社区> 问答> 正文

转换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_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。

展开
收起
爵霸 2016-03-23 11:06:00 1941 0
1 条回答
写回答
取消 提交回答
  • 你问题问的很好,里面涉及到了人们经常会犯的时区错误,看了下面的代码 你应该会对时区有所了解
    如果还疑问可以特别问我,我考虑写一个关于这个时区方面文章解惑

      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
    2019-07-17 19:10:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载