用特定的时间创buildNSDate

我有以下问题。 我需要从特定的时间创build一个NSDate对象。 时间是今天下午6点,在给定的时区(有时是CST,EST等)。 不是每天下午6点,而是在特定时区的今天下午6点。

我正在考虑使用NSCalendar对象来创build特定的date/时间,但问题是它需要一天,一个月和一年。 那么,如果我没有正确的date,我该如何设置这些值。 例如:

今天是2014年1月28日,11:09在CST。 现在,如果我需要创build一个NSCalendar对象,我需要日,月和年。 我不能使用NSDate对象的日,月和年计算,因为它会导致边缘情况的问题。

任何人都可以指向正确的方向吗?

你的担心似乎是关于边缘的情况,这表明对于我而言,而不是“今天下午6点”,你实际上是在寻找“下午6点”,即如果时间是下午6点,你想明天下午6点?

也许以下将有所帮助,不pipe我的猜测是否正确:

  1. 获取当前的date和时间 – NSDate
  2. 获取当前日历 – NSCalendar
  3. 将日历的时区设置为所需的时区
  4. 使用日历将date转换为组件 – NSDateComponents – 仅提取年,月,日,小时和时区的组件。 您现在已将目标时区中的组件向下舍入为最接近的小时。
  5. 使用日历从提取的时间组件中创build一个NSDate 。 你现在已经把你的倒数时间作为一个NSDate
  6. 使用您的组件计算要添加到下一个下午6点的时间的小时数。
  7. 将小时数转换为秒以生成NSTimeInterval值,并将该间隔添加到向下舍入的date。 NSDate将根据需要照顾提前date,更改月份等边缘情况。

HTH

试用NSDateComponents。

  // Initialize date components with date values NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; [dateComponents setYear:2014]; [dateComponents setMonth:1]; [dateComponents setDay:28]; [dateComponents setHour:11]; [dateComponents setMinute:9]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *configuredDate = [calendar dateFromComponents:dateComponents]; 

我不确定initWithCalendarIndetifier会使用各种NSCalendar标识符configuration选项,但是如果这个答案有帮助,也许有人可以添加一些编辑信息。

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit ) fromDate:[NSDate date]]; [components setHour:18]; NSDate *todayAt6PM = [calendar dateFromComponents:components]; 

你可以像这样创builddate:

 NSDate *today = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *weekdayComponents = [gregorian components:NSCalendarUnitDay fromDate:today]; [weekdayComponents setHour:[timeOfDay intValue]]; [weekdayComponents setMinute:00]; 

用特定的时间初始化一个NSDate对象