forked from boredzo/iso-8601-date-formatter
-
Notifications
You must be signed in to change notification settings - Fork 1
/
timetrial.m
68 lines (51 loc) · 2.1 KB
/
timetrial.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#import <Foundation/Foundation.h>
#import "ISO8601DateFormatter.h"
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
sleep(1);
ISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease];
NSString *inString = @"2011-04-12T13:15:17-0800";
NSUInteger numResults = 0;
NSDate *start, *end;
enum { numReps = 10000 };
NSLog(@"Timing ISO8601DateFormatter");
start = [NSDate date];
for (NSUInteger i = 10000; i > 0; --i) {
NSDate *date = [formatter dateFromString:inString];
NSString *outString = [formatter stringFromDate:date];
if (outString) ++numResults;
}
end = [NSDate date];
NSLog(@"Time taken: %f seconds", [end timeIntervalSinceDate:start]);
NSLog(@"Number of dates and strings computed: %lu each", (unsigned long)numResults);
NSLog(@"Time taken per date: %f seconds", [end timeIntervalSinceDate:start] / numReps);
[pool drain];
pool = [[NSAutoreleasePool alloc] init];
sleep(1);
numResults = 0;
NSLog(@"Timing C standard library parsing and unparsing");
struct tm timeInfo;
time_t then;
char buffer[80] = { 0 };
NSTimeInterval timeZoneOffset = [[NSTimeZone localTimeZone] secondsFromGMT];
start = [NSDate date];
for (NSUInteger i = 10000; i > 0; --i) {
strptime([inString cStringUsingEncoding:NSUTF8StringEncoding], "%Y-%m-%dT%H:%M:%S%z", &timeInfo);
timeInfo.tm_isdst = -1;
then = mktime(&timeInfo);
NSDate *date = [NSDate dateWithTimeIntervalSince1970:then + timeZoneOffset];
struct tm *outputTimeInfo;
time_t outputTime = [date timeIntervalSince1970] - timeZoneOffset;
outputTimeInfo = localtime(&outputTime);
strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%S%z", outputTimeInfo);
NSString *outString = [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];
if (outString) ++numResults;
}
end = [NSDate date];
NSLog(@"Time taken: %f seconds", [end timeIntervalSinceDate:start]);
NSLog(@"Number of dates and strings computed: %lu each", (unsigned long)numResults);
NSLog(@"Time taken per date: %f seconds", [end timeIntervalSinceDate:start] / numReps);
sleep(1);
[pool drain];
return EXIT_SUCCESS;
}