MapMapM 2013-04-26 02:28 采纳率: 0%
浏览 3244
已采纳

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

  • 写回答

1条回答 默认 最新

  • AldisZhan 2013-04-27 16:45
    关注

    你问题问的很好,里面涉及到了人们经常会犯的时区错误,看了下面的代码 你应该会对时区有所了解
    如果还疑问可以特别问我,我考虑写一个关于这个时区方面文章解惑

      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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程