objective-c - 如何使用这种格式将 NSString 转换为 NSDate : "2012-08-01T12:43:35+02:00"?

标签 objective-c ios date

<分区>

我需要像这样转换 NSString:"2012-08-01T12:43:35+02:00"到 NSDate,但我找不到合适的格式...

我使用这个类别代码将 NSString 转换为 NSDate:

[NSDate dateFromString:@"2012-08-01T12:43:35+02:00" withFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format 
{
    return [self dateFromString:dateString withFormat:format andLocaleIdentifier:@"fr"];
}

+ (NSDate*) dateFromString:(NSString*)dateString withFormat:(NSString*)format andLocaleIdentifier:(NSString*)localeIdentifier
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
    [dateFormatter setDateFormat:format];
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];
    [dateFormatter setLocale:locale];
    [locale release];

    NSDate *returnDate = [dateFormatter dateFromString:dateString];
    [dateFormatter release];

    return returnDate;
}

我尝试了所有格式,但没有一个是正确的...

yyyy-MM-dd'T'HH:mm:ss>> 2012-08-04T18:05:14
yyyy-MM-dd'T'HH:mm:ssv>> 2012-08-04T18:05:14法国时间
yyyy-MM-dd'T'HH:mm:ssvv>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssvvv>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssV>> 2012-08-04T18:05:14CEST
yyyy-MM-dd'T'HH:mm:ssVV>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssVVV>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:ssVVVV>> 2012-08-04T18:05:14法国时间
yyyy-MM-dd'T'HH:mm:ssz>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszz>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszzz>> 2012-08-04T18:05:14GMT+02:00
yyyy-MM-dd'T'HH:mm:sszzzz>> 2012-08-04T18:05:14欧洲中部夏令时
yyyy-MM-dd'T'HH:mm:ssZ>> 2012-08-04T18:05:14+0200
yyyy-MM-dd'T'HH:mm:ssZZ>> 2012-08-04T18:05:14+0200
yyyy-MM-dd'T'HH:mm:ssZZZ>> 2012-08-04T18:05:14+0200
yyyy-MM-dd'T'HH:mm:ssZZZZ>> 2012-08-04T18:05:14GMT+02:00

我该怎么办?


[编辑] 第一个丑陋的解决方案:

  1. 用正则表达式删除最后一个冒号
  2. 将字符串转换为“yyyy-MM-dd'T'HH:mm:ssZZZ”格式

有正则表达式

    NSString* dateString = @"2012-08-01T12:43:35+02:00";
    NSMutableString* dateWithoutColonString = [dateString mutableCopy];

    NSRegularExpression* lastColonRegex = [NSRegularExpression
                                           regularExpressionWithPattern:@"([\\+\\-][0-9][0-9]):"
                                           options:NSRegularExpressionCaseInsensitive
                                           error:nil];

    [lastColonRegex replaceMatchesInString:dateWithoutColonString
                              options:NSRegularExpressionCaseInsensitive
                                range:NSMakeRange(0, [dateString  length])
                         withTemplate:@"$1"];

最佳答案

使用 [格式化程序 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

关于objective-c - 如何使用这种格式将 NSString 转换为 NSDate : "2012-08-01T12:43:35+02:00"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810159/

相关文章:

python - 将 "unknown format"字符串转换为日期时间对象?

iphone - 是否可以将 NSMutableArray 转换为 iPhone 中的相反顺序?

ios - 在 MAC 和 iOS 中收听文件更新

iphone - 查看 UITableView 是否滚动到顶部

iOS UIView 动画 move 到另一个 UIView

Java 日期和时间格式

mysql - 随时返回当前日期的结果

ios - 当应用程序进入后台时停止/启动 NSTimer

ios - 使用 UIModalTransitionStylePartialCurl 时如何在 presentModalViewController 后面更新?

ios - 将导航栏更改为图像