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

Objective c 如何将日期时间(包括毫秒和时区信息)转换为NSDate,objective-c,datetime-format,Objective C,Datetime Format,我正在尝试将字符串转换为NSDate, 然而,格式总是显示为零 我尝试转换的日期是: 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.SSSS

我正在尝试将字符串转换为NSDate, 然而,格式总是显示为零

我尝试转换的日期是:

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" 
但这也不起作用


甚至可以不进行字符串操作和删除最后一个:

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

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;
}

我对此做了最后的搜索,发现您必须使用

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;
}

像这样的怎么样

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];

Z必须用单引号括起来。

像这样的东西怎么样

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];

Z必须是单引号。

看起来您使用的是ISO 8601格式的日期。如果您是从web服务获取这些内容,则格式会根据格式的不同而变化。看看这个:


这将根据格式转换日期,即使格式略有变化。

看起来您使用的是ISO 8601格式的日期。如果您是从web服务获取这些内容,则格式会根据格式的不同而变化。看看这个:


这将根据格式转换日期,即使格式略有变化。

Gee,我们已经有一段时间没有标准问题782了。使用NSDateFormatter,但首先必须清除最后一个:字符的字符串。可能重复的@HotLicksYou都错了。我在下面提供了一个答案,并没有修改日期字符串,而是使用getObjectValueGee,我们已经有一段时间没有标准问题782了。使用NSDateFormatter,但首先必须清除最后一个:字符的字符串。可能重复的@HotLicksYou都错了。我在下面提供了一个答案,并没有修改日期字符串,而是使用getObjectValue。在这种情况下,我看不出getObjectValue与dateFromString有什么不同。在这两种情况下,输入字符串似乎都需要删除。这不会改变任何事情。dateFromString:调用getObjectValue:。。。前者只是后者的一个方便的包装器,因为当您不关心可能错误的细节时。我建议您在标记代码或做出这样的声明之前先尝试代码。您仍然没有测试代码:这里有更多支持我尝试过。你试过我的吗?在这种情况下,我看不出getObjectValue与dateFromString有什么不同。在这两种情况下,输入字符串似乎都需要删除。这不会改变任何事情。dateFromString:调用getObjectValue:。。。前者只是后者的一个方便的包装器,因为当您不关心可能错误的细节时。我建议您在标记代码或做出这样的声明之前先尝试代码。您仍然没有测试代码:这里有更多支持我尝试过。你试过我的吗?它们做完全相同的事情。这不考虑毫秒数。然而,使用getObjectValue而不是dateFromStringso.SSSS'Z'几乎不值得-1这不考虑毫秒。然而,使用getObjectValue而不是dateFromStringso.SSSS'Z'几乎不值得-1