2011-01-25 43 views
8

我有timestring格式,例如2:00。我想将它初始化为NSDate,目前date。 我试着做初始化一个特定时间的NSDate对象

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setHour:2]; 

我不能Date对象来进行比较。请帮助

回答

30

尝试

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:6]; 
[comps setMonth:5]; 
[comps setYear:2004]; 

NSCalendar *gregorian = [[NSCalendar alloc] 
    initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 

你应该能够后与日期比较。

也许你的意思是类似的。我想会设置使用今天的日期,然后你可以创建NSDateComponents并设置时间值。

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
         initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *weekdayComponents = 
        [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today]; 
[weekdayComponents setHour:12]; 
[weekdayComponents setMinute:10]; 
[weekdayComponents setSeconds:30]; 
+0

感谢您的答复。是否有一种方法来设置这只与时间​​组件日期需要是目前的日期。只能更改日期对象使用NSDate * mydate = [NSDate日期]初始化的时间组件; – agupta 2011-01-25 19:54:52

+0

我认为你的意思是这样的。 – menapole 2011-01-25 20:00:26

3

要将当前日期为2的NSDate初始化,您必须拆分包含年,月,日等组件的NSDate。

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *weekdayComponents = [gregorian 
             components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
             fromDate:today]; 

设置小时至2

weekdayComponents.hour = 2; 

然后通过这些组件

NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents]; 
0

只是汇集了一些Objective C的答案,我(创建一个新的NSDate现在)有这个帮手功能:

+ (NSDate*)dateForTodayAtHour:(NSUInteger)hour andMinutes:(NSUInteger)minutes { 
    NSDate* today = [NSDate date]; 
    NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateComponents* weekdayComponents = [gregorian components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:today]; 
    [weekdayComponents setHour:hour]; 
    [weekdayComponents setMinute:minutes]; 
    [weekdayComponents setSecond:0]; 
    NSDate* result = [gregorian dateFromComponents:weekdayComponents]; 
    return result; 
}