无法打印格式化程序返回的NSDate

时间:2011-06-27 05:22:10

标签: objective-c ios cocoa-touch nsdate

我想查看NSDate中存储的内容,因此我使用NSLog,但它显示(null),而如果我打印字符串stf2,它显示了正确的价值。

           NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
           [formatter setDateFormat:@"YYYY-MM-dd"];

            NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMM dd, yyyy"];

    NSString *stf2 = [[pact.date componentsSeparatedByString:@" "] objectAtIndex:0];
            NSLog(@"date %@",stf2);

            NSDate *date_ = [formatter dateFromString:stf2];
            pact.date = [formatter1 stringFromDate:date_];
            NSLog(@"date %@",[NSDate date_]);

4 个答案:

答案 0 :(得分:2)

您在问题中提出的代码中存在两个具体问题。

格式重置

首先,

[formatter setDateFormat:@"YYYY-MM-dd"];

然后初始化第二个格式化程序,然后重置第一个格式化程序的格式

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];

强调

[formatter setDateFormat:@"MMM dd, yyyy"];

这应该是formatter1,但是formatter

日期格式

如果你看一下你使用YYYY-MM-dd的格式,它看起来很好。但明显的YYYY有不同的目的,可能与我们通常的日历年不同。您应该使用小写y代替。

[formatter setDateFormat:@"yyyy-MM-dd"];

我不认为你的意思是

NSLog(@"date %@",[NSDate date_]);

应该是

NSLog(@"date %@", date_);

答案 1 :(得分:1)

您需要通过设置正确的日期格式化程序来更正日期格式化程序。先做这个

[formatter setDateFormat:@"yyyy-dd-MM"];

//它应该像你的字符串一样。比如你的字符串是2011年6月27日,那么就应该

[formatter setDateFormat:@"yyyy-MM-dd"]; 

根据字符串的日期格式设置格式化程序。然后从这一行获取日期

NSDate *date_ = [formatter dateFromString:stf2];

答案 2 :(得分:0)

假设“stf2”是你的字符串,那么你的对象 formatter 可能是nil。

答案 3 :(得分:0)

以下功能对您有所帮助。

“getDateTimeFromString”将日期和时间作为参数,它将返回NSDate对象。\

-(NSDate *)getDateTimeFromString :(NSString *)tempDate :(NSString *)tempTime{

NSString *dateValue = [tempDate stringByAppendingFormat:@" %@",tempTime];

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

NSDate *date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:dateValue];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:date];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:date];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:date] autorelease];

return date;
}

“getDateStringFromDate”将NSDate作为参数,它将返回NSString。 所以,你可以NSLog那个价值。

-(NSString *)getDateStringFromDate :(NSDate *)dateValue{

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setTimeStyle:NSDateFormatterShortStyle];

[timeFormat setDateFormat:@"HH:mm a"];  

 NSString *theDate = [dateFormat stringFromDate:dateValue];

 /*NSLog(@"\n"        
 "theDate: |%@| \n"
 "theTime: |%@| \n"
 , theDate, theTime);*/

return theDate;
}

希望你能得到答案。