objective-c - 在 Objective-C 中比较两次的最好/最简单的方法是什么?

标签 objective-c iphone

我有一个表示时间的字符串,例如“11:13 AM”。这是使用 NSDateFormatter 和 stringFromDate: 方法生成的。

我想将这个时间与当前时间进行比较,但是当我使用 dateFromString: 方法将字符串转回日期时,会添加年、月和日——这是我不想要的。我只需要知道现在是 < 还是 > 存储在字符串中的时间。

处理该问题的最佳方法是什么?预先感谢您的帮助。

最佳答案

不使用字符串表示,而是使用从选择器获得的 NSDate。您可以使用 NSDateComponents 转换小时/分钟/秒,然后也将 [NSDate date] 转换为 NSDateComponents。比较两组组件的小时/分钟/秒。

EDIT -- 将 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;
}

关于objective-c - 在 Objective-C 中比较两次的最好/最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2804804/

相关文章:

iphone - PDF 到 EPUB 转换过程中丢失的图像

iphone - 每隔x分钟在后台检查一次条件,如果为true,则发送通知

ios - 将自定义对象导入多个文件

iphone - UIBezierPath 路径形状可点击和可拖动

iPhone - 导入/导出应用程序数据?

objective-c - 无法找出 "Unrecognized selector sent to instance"来源

iphone - 具有自定义高度的自定义 UINavigationBar 导致 UIBarButtonItem 的定位错误

ios - 为什么 SecItemAdd 返回 -50(无效参数)

Android 应用到应用通信

iphone - 以编程方式获取 iPhone 的运营商信号强度