将时间字符串转换为日期并查找即将发布的日期

时间:2014-01-29 03:22:39

标签: ios cocoa-touch datetime nsdate

在我的计划中,我有NSArray个各种日期和时间,存储为字符串,格式如下:@[@"07:23",@"18:09",@"13:55"];

当我使用NSDateFormatter将这些转换为NSDate时,时间是正确的,但会添加年/月/日信息。

我创建的数组是公交时刻表的列。对于阵列所代表的任何停止,每个条目都是一个时隙。我的应用程序需要占用当前时间:[NSDate date]并按顺序查看数组中的下一个时间。我只是想在下一班车到达时显示。

我曾想过使用-[NSDate's laterDate:]将数组的每个元素与当前日期和时间进行比较,但问题是当我将字符串转换为NSDate个对象时,它会给它们一些随机的日子像13:55:00 January 1st, 2001这样的月份总是在当前日期之前,所以我的测试不起作用。

我可以找到一些真正悲惨的McGuyvered的解决方法,但我更喜欢干净的东西。

我想知道的是这些事情:

  1. 我可以从NSDate
  2. 中删除日/月/年部分
  3. 是否可以轻松地将我的数组中每个对象的日/月/年设置为今天而不使用NSDateComponentsNSCalendar?我可以在他们进入阵列时操纵它们。
  4. 重新格式化当前日期/时间以匹配数组的日/月/年会更容易吗?
  5. 否则,是否有更好,更清洁的解决方案来寻找下一个即将到来的时段?如果有必要,我愿意从数组中更改整个格式。

1 个答案:

答案 0 :(得分:3)

  

我可以从NSDate中删除日/月/年部分吗?

没有。 NSDate仅仅是一个时间点,从某个参考日期开始是几秒钟。将该瞬间描述为某些年/月/日取决于当地日历。例如,我输入的[NSDate date]的“日期”是我住的28,但是日本的NSDate值是29。

  

是否可以轻松设置每个对象的日/月/年   NSMutableArray到今天?不使用NSDateComponents和   NSCalendar?

没有。这就是NSDateComponents的用途。

  

否则,是否有更好,更清洁的解决方案   下一个即将到来的时段?我愿意改变整个格式   必要时来自数组。

使用NSCalendar的-components:fromDate:获取与[NSDate date]匹配的NSDateComponents对象。用到达时间的小时/分钟/秒替换小时/分钟/秒组件:这是今天的到达时间。添加一个日期组件:这是明天的到达时间。 (周末和假日时间表会导致额外的复杂性;工作日组件可能会有用。)使用NSCalendar的-dateFromComponents:转换回NSDate并在那里执行日期比较。