服务器给的时间格式:
"Sun Sep 13 11:43:04 +0800 2015"
我的代码:
NSString *timeString = @"Sun Sep 13 11:43:04 +0800 2015";
NSTimeZone *sourceTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";
format.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
format.timeZone = sourceTimeZone;
NSDate *date = [format dateFromString:timeString];
NSLog (@"date: %@", date );
打印结果:
date: 2015-09-13 03:43:04 +0000
相差了八个小时,昨晚到今天弄了好长时间都没有弄好~
求指点~
1
jianzong 2015-09-13 12:19:53 +08:00
不是 NSDate 与 NSString 转换的问题吧,字串跟打印结果的时区就是差了 8 小时。
后面的+0000 和+0800 是指时区。 |
3
wezzard 2015-09-13 12:28:47 +08:00
結果是正確的,一個是 GMT +8 一個是 UTC ,兩個時間是相等的。
你可以嘗試一下用兩個 NSDateFormatter ,一個用來完成 NSString -> NSDate 的轉換,一個用來完成 NSDate -> NSString 的轉換,第一個 NSDateFormatter 不要設置時區,因爲你的 date format 裏面已經提示了時區,第二個 NSDateFormatter 設置時區爲本地時區。 |
4
SeanChense 2015-09-13 12:35:50 +08:00 via iPhone
中国在东八区。
|
5
fhefh OP NSString *timeString = @"Sun Sep 13 11:43:04 +0800 2015";
NSTimeZone *sourceTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"]; NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy"; format.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; format.timeZone = sourceTimeZone; NSDate *date = [format dateFromString:timeString]; NSTimeZone *zone = [NSTimeZone systemTimeZone]; NSInteger interval = [zone secondsFromGMTForDate:date]; NSDate *localDate = [date dateByAddingTimeInterval:interval]; NSLog (@"date: %@", localDate ); 已解决~ 3QS 参考: http://blog.csdn.net/diyagoanyhacker/article/details/7096612 |
6
zerh925 2015-09-13 13:13:08 +08:00 via iPhone
format.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
@“ en_US ”是美国? |