用特定的时间创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我的猜测是否正确:
- 获取当前的date和时间 –
NSDate
- 获取当前日历 –
NSCalendar
- 将日历的时区设置为所需的时区
- 使用日历将date转换为组件 –
NSDateComponents
– 仅提取年,月,日,小时和时区的组件。 您现在已将目标时区中的组件向下舍入为最接近的小时。 - 使用日历从提取的时间组件中创build一个
NSDate
。 你现在已经把你的倒数时间作为一个NSDate
。 - 使用您的组件计算要添加到下一个下午6点的时间的小时数。
- 将小时数转换为秒以生成
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对象