stringFromDate总是NIL

iOS*_*Dev 2 iphone objective-c nsdate ipad ios

我知道这是一个重复的问题,但在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];
Run Code Online (Sandbox Code Playgroud)

收到的服务器NSDate具有以下格式:

 2012-05-23 13:06:51.394+1000
Run Code Online (Sandbox Code Playgroud)

我希望它

 May 25 13:06 PM
Run Code Online (Sandbox Code Playgroud)

请帮忙.

提前致谢.

nha*_*tdh 5

beginDate的类型是什么?如果是NSString,则首先使用dateFromStringNSDateFormatter方法将其转换为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];
Run Code Online (Sandbox Code Playgroud)


lna*_*ger 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);
Run Code Online (Sandbox Code Playgroud)

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