如何将日期时间(包括毫秒和时区信息)转换为NSDate

时间:2012-08-17 18:25:59

标签: objective-c datetime-format

我正在尝试将字符串转换为NSDate, 但格式总是以 nil

的形式出现

我试图转换的日期是:

2012-08-16T16:20:52.619000+00:00

我正在尝试的日期格式为:

@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZ"

如果我将日期更改为:

@"2012-08-16T16:20:52.619000+0000" // removing the : from +00:00

它有效,但我会

(我也试过了

@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZ:ZZ" 
@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZ':'ZZ" 

但这也不起作用。)

甚至可以在不进行字符串操作和删除最终“:”的情况下执行此操作吗?

3 个答案:

答案 0 :(得分:4)

我对此进行了最后的搜索,发现你必须使用

getObjectValue

而不是

dateFromString

如果其他人遇到此问题,我发布我的方法将这些字符串转换为NSDate

+ (NSDate *)dateFromString:(NSString *)dateString {
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"];

    NSDate *theDate = nil;
    NSError *error = nil;
    [dateFormat getObjectValue:&theDate forString:dateString range:nil error:&error];
    [dateFormat release];
    return theDate;
}

答案 1 :(得分:1)

看起来您使用的是ISO 8601格式的日期。如果从Web服务获取这些内容,格式将根据格式更改。看看这个:

http://boredzo.org/iso8601parser/

这将根据格式转换日期,即使格式稍有变化也是如此。

答案 2 :(得分:-1)

这样的东西
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];

Z必须是单引号。