stringFromDate总是NIL

时间:2012-05-23 03:22:25

标签: iphone objective-c ios ipad nsdate

我知道这是一个重复的问题,但在stackoverflow和google上搜索了许多类似的问题之后,没有一个解决方案适合我。

我想将从DB收到的日期转换为字符串格式,以便在iPhone应用程序中显示。

我将以下列方式将日期转换为字符串,但[dateFormat stringFromDate:beginDate]始终返回nil。

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MMM dd hh:mm a"];
    NSString *dateString = [dateFormat stringFromDate:beginDate];
    NSLog(@"date: %@", dateString);
    [dateFormat release];

收到的服务器NSDate格式如下:

 2012-05-23 13:06:51.394+1000

我希望它

 May 25 13:06 PM

请帮忙。

提前致谢。

5 个答案:

答案 0 :(得分:5)

beginDate的类型是什么?如果是NSString,则首先使用NSDateFormatter的dateFromString方法将其转换为NSDate。

EDIT2 :(修正了拼写错误并添加了完整的工作示例)

NSString *beginDate = @"2012-05-23 13:06:51.394+1000";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

// Set the format of the dateFormatter to the date format of the server
dateFormatter.dateFormat = @"yyyy-MM-dd HH:MM:ss.SSSZ";
// Convert the NSString to NSDate
NSDate* date = [dateFormatter dateFromString: beginDate];

// Set the format of dateFormatter to your own format
dateFormatter.dateFormat = @"MMM dd hh:mm a";
// Convert NSDate to your own format of date
beginDate = [dateFormatter stringFromDate: date];

答案 1 :(得分:5)

首先需要将beginDate字符串转换为实际的NSDate,然后执行此操作:

NSString *beginDateString  = [arr_data objectAtIndex:1];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSZ"];
NSDate *beginDate = [formatter dateFromString:beginDateString];

[formatter setDateFormat:@"MMM dd hh:mm a"];
NSString *dateString = [formatter stringFromDate:beginDate];
NSLog(@"date: %@", dateString);

请注意,您在问题中说要输出May 25 13:06 PM,但实际上会输出May 25 01:06 PM。 (13:06将使用24小时时间而不是12小时时间,并且不需要上午/下午。)

答案 2 :(得分:2)

上面的代码没有错,它适用于当前日期。只需替换

NSString *dateString = [dateFormat stringFromDate:beginDate];

通过

NSString *dateString = [dateFormat stringFromDate:[NSDate date]];

并且会起作用。

您的beginDate似乎存在问题。

答案 3 :(得分:0)

可能是你的beginDate的格式就像“2013-09-29 14:57:48.0”,但是dataFormate是

[dFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]

更改为“yyyy-MM-dd HH:mm:ss.0”就可以了

答案 4 :(得分:0)

您需要先致电setDateFormat,然后再致电stringFromDate

 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm dd/MM/yyyy"];
 NSString * dateString =[dateFormatter stringFromDate:someDate];