程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ios-轉換NSString到NSDate

ios-轉換NSString到NSDate

編輯:編程綜合問答
轉換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。

最佳回答:


你問題問的很好,裡面涉及到了人們經常會犯的時區錯誤,看了下面的代碼 你應該會對時區有所了解
如果還疑問可以特別問我,我考慮寫一個關於這個時區方面文章解惑

  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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved