2013-04-18 82 views
1

我想将日期字符串转换为另一种格式。我正在这样做。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); 

但是,这是我从我的NSLOGs得到

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 

任何人可以帮助我吗?

回答

2

使用我的转换日期格式这种波纹管自定义的方法...

-(NSString *)changeDateFormat:(NSString*)stringDate dateFormat:(NSString*)dateFormat getwithFormat:(NSString *)getwithFormat{ 


    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:dateFormat]; 

    NSDate *date = [dateFormatter dateFromString:stringDate]; 

    dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:getwithFormat]; 

    NSString *convertedString = [dateFormatter stringFromDate:date]; 
    NSLog(@"Converted String : %@",convertedString); 
    return convertedString; 
} 

,并使用它像波纹管......

NSString *strSDate = [self changeDateFormat:_dayObject.p_date dateFormat:@"yyyy-MM-dd" getwithFormat:@"EEEE, dd/MM/yyyy"]; 
NSLog(@"datestring is AFTER %@",strSDate); 

My Blog这个帖子...

+1

This Works,thank you! – Steaphann 2013-04-18 07:12:47

0

检查参数字符大小写

NSLog(@"datestring is NOW %@",_dayObject.p_date); 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; //MODIFIED 
NSDate *date = [dateFormat dateFromString:_dayObject.p_date]; 
NSLog(@"date transformed %@",date); 
[dateFormat setDateFormat:@"EEEE, dd/MM/yyyy"]; //MODIFIED 
NSString *dateStr = [dateFormat stringFromDate:date]; 
NSLog(@"datestring is AFTER %@",dateStr); 
0

请尝试..this也将努力获得周名

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"eeee"]; 
NSCalendar * cal = [NSCalendar currentCalendar]; 
NSUInteger numWeekdays = [cal maximumRangeOfUnit:NSWeekdayCalendarUnit].length; 
NSDateComponents * comp = [[NSDateComponents alloc] init]; 
for(NSUInteger day = 1; day <= numWeekdays; day++){ 
[comp setWeekday:day]; 
[comp setWeek:0]; 
NSDate * date = [cal dateFromComponents:comp]; 

NSString * dayName = [dateFormat stringFromDate:date]; 

NSLog(@"%@", dayName); 
} 
1

入住这.....

NSLog(@"datestring is NOW ==>> %@", _dayObject.p_date); 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd"]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 

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); 
  • OUTPUT:〜

    datestring is NOW == >> 2013-05-04

    date transfo Rmed指== >> 2013年5月4日00:00:00 +0000

    datestring之后== >>周六,2013年4月5日

0

你没事做,除了setTimeZone,评论你会得到你的输出。

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"]]; //NOT NEEDED 
NSString *dateStr = [dateFormat stringFromDate:date]; 
NSLog(@"datestring is AFTER %@",dateStr); 
0

改变这一点: “YYYY”

为: “YYYY”

原因的错误,

这是一个常见的错误使用YYYY。 yyyy指定日历年 ,而YYYY指定ISO 年历中使用的年份(“年份周”)。在大多数情况下,yyyy和yyyy产生的数字相同,但它们可能不同。通常,您应该使用日历年的 。