2 ooomiao oOOMIAO 于 2013.04.18 17:09 提问

NSDate转换结果失误

将下面的日期字符串转换成其他格式。操作如下:

NSLog(@"datestring is NOW %@",_dayObject.p_date);
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-DD"];
NSDate *date = [dateFormat dateFromString:_dayObject.p_date];
NSLog(@"date transformed %@",date);
[dateFormat setDateFormat:@"EEEE, dd/MM/YYYY"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSString *dateStr = [dateFormat stringFromDate:date];
NSLog(@"datestring is AFTER %@",dateStr);

但是在NSLog中得到:

2013-04-18 08:43:36.181 mosaqua2[9629:907] datestring is NOW 2013-05-04
2013-04-18 08:43:36.184 mosaqua2[9629:907] date transformed 2013-01-03 23:00:00 +0000
2013-04-18 08:43:36.184 mosaqua2[9629:907] datestring is AFTER donderdag, 03/01/2013

正确的格式是: Saterday, 04/05/2013

谢谢您的解答。

1个回答

xiaoyaokk
xiaoyaokk   2013.04.22 15:37
已采纳
    NSLog(@"datestring is NOW %@",_dayObject.p_date);
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    NSTimeZone *GTMzone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    [dateFormat setDateFormat:@"YYYY-MM-dd"];
    [dateFormat setTimeZone:GTMzone];
    NSDate  *date = [dateFormat dateFromString:_dayObject.p_date];
    NSLog(@"date transformed %@",date);
    [dateFormat setDateFormat:@"EEEE, dd/MM/YYYY"];
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    NSString *dateStr = [dateFormat stringFromDate:date];
    NSLog(@"datestring is AFTER %@",dateStr);

使用NSDateFormatter转换时间字符串时,默认的时区是系统时区,我们使用的一般都是北京时间(+8)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
NSDate格式化输出
NSString *dateStr, *fileName;     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];     dateFormatter.dateFormat = [NSString stringWithFormat:@"yyyyMMdd HH:mm:ss"];     dateStr = [
iOS中NSDate常用转换操作整合
iOS 中NSDate转换操作整合
时间戳转化为日期TimeStamp转NSDate转NSString
//时间戳处理 NSInteger time = [self.album.updatedAt integerValue] / 1000; NSNumber *timer = [NSNumber numberWithInteger:time]; NSTimeInterval interval = [timer doubleValue]; NSDate *date = [NSDate dateWith
将特殊格式的NSSring转换成NSDate
普通的转换: NSDateFormatter *formatter = [[NSDateFormatter alloc] init];         [formatter setDateFormat:@"MMM dd, yyyy KK:mm:ss aa"];         NSDate *date = [formatter dateFromString:dateStr];      
关于NSdate时区转换
系统默认的是 o时区的 很多国外的demo 都不是中国时区~~  - (void)dailyCalendarViewDidSelect:(NSDate *)date {              NSLog(@"%@", date);          NSDateFormatter  *dateFormatter = [[NSDateForma
NSDate 时间戳转化为时间 顺带解决NSDate的8小时问题
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; [formatter setTimeZone
ios-NSString与NSDate互相转换及时间早晚比较
由 NSDate 转换为 NSString: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *strDate = [dateFormatter stringFromDate:[NS
NSDate和NSString之间的转换,(可以转时区的哈)
NSString和NSDate互转需要用到NSDateFormatter,设置一下timezone和format即可,直接上代码 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSTimeZone *timeZone = [NSTimeZone localTimeZone]; [format
NSDate使用,NSDateFormatter转换,及DatePicker
取当前时间的秒数 NSTimeInterval time = [[NSDate date] timeIntervalSince1970]; long long int date = (long long int)time; NSLog(@”date\n%d”, date); //1295322949 //把秒数转化成yyyy-MM-dd hh:mm:ss格式 NSDate *dd = [
core data 的NSDate 属性类型和sqlite3的timestamp字段类型之间的相互转换
core data直接支持NSDate类型的属性,在iOS里确实使用很方便。有时候我们需要在其他程序里直接访问sqlite文件,这一属性在底层的sqlite文件里是映射为Timestamp字段的。但是直接select出来这个字段并转换成Date类型,就会发现转换回来的日期出错了。举个列子,用python处理Coredata的sqlite,Coredata中存入的是2011-10-6,直接从Sqli