Отличительной особенностью форматов даты и времени ISO8601 является то, что вы можете просто сравнивать строки в алфавитном порядке.Таким образом, вы можете записать текущее время в NSString в формате ISO8601, а затем использовать метод NSString compare
для двух строк.
Однако часто лучше сравнивать NSDate
объекты.Я использую две вспомогательные функции для преобразования между строкой даты ISO и NSDate, используя strftime
и strptime
- эти функции просто выполняют часть yyyy-mm-dd
, но вы должны иметь возможность легко их расширять:
NSString* ISOStringWithDate(NSDate* date)
{
char buf[11]; // Enough space for "yyyy-mm-dd\000"
time_t clock = [date timeIntervalSince1970];
struct tm time;
gmtime_r(&clock, &time);
strftime_l(buf, sizeof(buf), "%Y-%m-%d", &time, NULL);
return [NSString stringWithUTF8String:buf];
}
NSDate* dateWithISOString(NSString* dateString)
{
struct tm time;
memset(&time, 0, sizeof(time));
if (!strptime_l([dateString UTF8String], "%Y-%m-%d", &time, NULL))
{
return nil;
}
time_t clock = timegm(&time);
return [NSDate dateWithTimeIntervalSince1970:clock];
}