「2011-03-29T15:57:02.680-04:00」などの時刻が現在時刻より前かどうかを確認したい。どうすればこれを行うことができますか?
1180 次
2 に答える
4
Peter HoseyのISO8601DateFormatterクラスを使用して、それをNSDateオブジェクトに解析し、それを。と比較し[NSDate date]ます。
例:
NSString *iso8601String = ...;
ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSDate *isoDate = [formatter dateFromString:iso8601String];
[formatter release]; //if you're not using ARC
BOOL isBeforeCurrent = [[NSDate date] compare:isoDate] == NSOrderedAscending;
于 2011-12-16T18:41:04.437 に答える
4
ISO8601の日付と時刻の形式の優れている点は、文字列をアルファベット順に簡単に比較できることです。したがって、現在の時刻をISO8601形式でNSStringに書き込んでからcompare、2つの文字列に対してNSStringのメソッドを使用できます。
NSDateただし、多くの場合、オブジェクトを比較する方が適切です。strftime2つのヘルパー関数を使用してISO日付文字列とNSDateを変換します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];
}
于 2011-12-16T19:50:26.747 に答える