Iphone 使用特定时间初始化NSDate对象

Iphone 使用特定时间初始化NSDate对象,iphone,nsdate,Iphone,Nsdate,我有time格式的string例如2:00。我想用presentdate将其初始化为NSDate。 我试过了 NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setHour:2]; 我无法将其与日期对象进行比较。请帮助尝试 NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:6]; [comps setMo

我有
time
格式的
string
例如
2:00
。我想用present
date
将其初始化为
NSDate
。 我试过了

   NSDateComponents *comps = [[NSDateComponents alloc] init];
   [comps setHour:2];
我无法将其与日期对象进行比较。请帮助

尝试

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 setSecond:30];

您需要使用
NSCalendar
对象将
NSDateComponents
转换为
NSDate
。请参阅上的Apple文档。

要使用当前日期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

NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents];

我(现在)把一些客观C答案放在一起,就有了这个辅助函数:

+ (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;
}

感谢您的回复。是否有办法仅使用时间组件设置此值日期需要为当前日期。是否可以仅更改使用NSDate*mydate=[NSDate date date]初始化的日期对象的时间组件;我想你的意思是这样的。是的,再次感谢你的快速回复。NSTimeInterval Diff=[lastDate TimeIntervalsIncestDate:weekdayComponents];这是在警告我,不兼容的Objective-C类型struct-NSDateComponents需要struct-NSDate。请快速更正:应该是[weekdayComponents setSecond:30];感谢您的回复。是否可以设置NSDate的时间组件。我可以将NSDate对象初始化为当前日期和时间。之后是否可以更改时间组件。使用相同的日历将NSDate转换为NSDate组件,然后设置时间,然后使用日历将其转换回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;
}