-1

NSString转换NSDate返回null

原始字符串输出“ 2013-07-16T18:42:56+02:00 ”但是当我尝试转换为NSDate它时返回“null”

这是我的代码:

// original string
NSString *str = [timeStamp objectAtIndex:indexPath.row];

// convert to date
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

//[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss'+11:00'"];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; // updated from Stavash's post below. Still null is outputted for the date though
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
NSDate *dte = [dateFormat dateFromString:str];

cell.timeStampLabel.text = [NSString stringWithFormat:@"%@",dte ];
4

3 回答 3

6

为什么要将 +11:00 硬编码到格式中?我认为这对你有用(在 iOS6.0+ 上):

[dateFormat setDateFormat:@"yyyy-MM-dd\'T\'HH:mm:ssZZZZZ"];

对于 iOS5.0+ 使用:

[dateFormat setDateFormat:@"yyyy-MM-dd\'T\'HH:mm:ssZZZ"];

更新

请参阅下面 Rob 的评论 - 在 iOS5.0+ 上,日期格式仅适用于没有冒号的时区。

于 2013-08-05T12:33:52.103 回答
1

您以不正确的方式指定日期

更正的代码写在下面

NSString *str = @"2013-07-16T18:42:56+0200";
// convert to date
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
NSDate *dte = [dateFormat dateFromString:str];
于 2013-08-05T12:39:38.023 回答
1
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];

NSString *dateString = @"2013-07-16T18:42:56+02:00";
NSArray * dateArray = [dateString componentsSeparatedByString:@"+"];
NSString * timeZone = [dateArray lastObject];
timeZone = [timeZone stringByReplacingOccurrencesOfString:@":" withString:@""];
dateString = [NSString stringWithFormat:@"%@+%@",[dateArray objectAtIndex:0], timeZone];

NSDate *dte = [dateFormat dateFromString:dateString];

试试这个......希望它对你有用..我这样做的主要原因是ZZZ会理解+0200,它不会理解+02:00。为了让 DateFormatter 理解 +02:00 我们需要使用 TZD,不幸的是这也导致 null :( 参考:http ://www.w3.org/TR/NOTE-datetime

于 2013-08-05T13:08:24.157 回答