我有一个时间的字符串表示,如“11:13 AM”。这是使用NSDateFormatter和stringFromDate:方法生成的。
我想将此时间与当前时间进行比较,但是当我使用dateFromString:方法将字符串转换回日期时,会添加年,月和日 - 这是我不想要的。我只需要知道现在是否<或者>存储在字符串中的时间。
最好的办法是什么?在此先感谢您的帮助。
答案 0 :(得分:9)
使用您从选择器获得的NSDate,而不是使用字符串表示。您可以使用NSDateComponents转换该小时/分钟/秒,然后将[NSDate date]转换为NSDateComponents。比较两组组件的小时/分钟/秒。
编辑 - 使用实用程序功能进行此类操作,将NSDate的hr / min / sec组件转换为secondsOfTheDay(午夜后的秒数)。
您可以直接使用两个时间值,因为它们都是午夜以来的秒数。简单的整数可以很容易地进行比较,存储和操作。您不必一直使用NSDate。
//----------------------------------------------------------------------------
// extracts hour/minutes/seconds from NSDate, converts to seconds since midnight
//----------------------------------------------------------------------------
unsigned secondOfTheDay( NSDate* time )
{
NSCalendar* curCalendar = [NSCalendar currentCalendar];
const unsigned units = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* comps = [curCalendar components:units fromDate:time];
int hour = [comps hour];
int min = [comps minute];
int sec = [comps second];
return ((hour * 60) + min) * 60 + sec;
}
答案 1 :(得分:4)
如果我正确理解了问题,您使用的是dateFromString:
NSDateFormatter
方法。这给了你正确的时间,但是默认日期是1970年1月1日,这与当前日期/时间比较没用。
这很容易解决。使用setDefaultDate:
将默认日期设置为今天。
NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"hh:mm a"];
[formatter setDefaultDate:now];
NSDate *theDate = [formatter dateFromString:@"11:13 AM"];
NSComparisonResult theResult = [theDate compare:now];
答案 2 :(得分:2)
您可以重用用于创建字符串的字符串格式化程序吗?所以,假设你创建了这样的字符串:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm a"];
NSString *dateAsString = [formatter stringFromDate:[NSDate date]];
你可以得到这样的NSDate:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm a"];
NSDate *date = [formatter dateFromString:dateAsString];
不会保留日,月,年和时区信息,但您将拥有一个NSDate对象,其值为1/1/1970,GMT为时区偏移量。
此时,您可以使用compare :(通常保留用于排序操作)或laterDate:或earlyDate:方法。
请谨慎使用NSDateFormatter,因为您可能遇到国际化问题。
如果您需要将有关当前日期的信息添加到dateFromString:中的日期,例如月份日和年份,则需要使用NSCalendar的dateByAddingComponents:toDate:options:method。
答案 3 :(得分:0)
如果字符串最初是从NSDate
创建的,那么您将希望使用原始NSDate
与[NSDate date]
NSDate
进行比较compare:
方法(或某些变体,例如earlierDate:
或laterDate:
)。
答案 4 :(得分:0)
您应该使用基于24小时的NSDateFormatter并比较为字符串(“09:00 am”>“08:00 pm”,但“09:00”<“20:00”)。但一般来说,使用NSDate实例而不是字符串
是正确的