轉換兩個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