#import <objc/objc.h>
#import <objc/Object.h>
#import <Foundation/Foundation.h>

@interface TestObj : NSObject
{
	int num;
}
- (void)foo;
@end
 
@implementation TestObj
- (NSDate *)parseRFC3339Date:(NSString *)date {
	NSDate *parsedDate = nil;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    NSRange zRange = [date rangeOfString:@"Z"];
    if (zRange.length > 0 && zRange.location == date.length - 1) {
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
        [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
        parsedDate = [dateFormatter dateFromString:date];
        if (parsedDate == nil) {
            [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"];
            dateFormatter.lenient = YES;
            parsedDate = [dateFormatter dateFromString:date];
        }
        return parsedDate;
    } else {

        [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
        parsedDate = [dateFormatter dateFromString:date];
        if (parsedDate == nil) {
            [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ"];
            dateFormatter.lenient = YES;
            parsedDate = [dateFormatter dateFromString:date];
        }
        return parsedDate;
    }
}
 
int main()
{
	id obj = [[TestObj alloc] init];
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26+07:00"] == nil ? "Failure\n" : "Success\n");
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3+07:00"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3452+07:00"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26-07:00"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3-07:00"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3452-07:00"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3452Z"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26.3Z"] == nil ? "Failure\n" : "Success\n");;
	printf([obj parseRFC3339Date:@"2007-05-01T15:43:26Z"] == nil ? "Failure\n" : "Success\n");;
	return 0;
}
@end