Initialize a NSDate object with a specific time

可紊 提交于 2019-12-04 18:13:02

问题


I have time in string format for example 2:00. I want to initialize it to NSDate with present date. I tried doing

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

I am not able to compare this with a date object. Please help


回答1:


Try

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];

You should be able to compare with date after that.

Maybe you mean something like. I think will set using today's date and then you can create NSDateComponents from that and set time values.

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];



回答2:


To initialize an NSDate with the present date at 2, you'll have to split an NSDate with components year, month, and day, e.g.

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

Set the hours to 2

weekdayComponents.hour = 2;

And then create a new NSDate by those components

NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents];



回答3:


You need to use an NSCalendar object to convert NSDateComponents to an NSDate. See Apple's documentation on Creating a Date from Components.




回答4:


  func initializeDateWithTime(date:NSDate,hrs:Int,minutes:Int) -> NSDate{
    let today = date
     let gregorian:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
     let dateComponents = gregorian.components([.Year, .Month, .Day], fromDate: today)

     dateComponents.hour = hrs;
     dateComponents.minute = minute;


     let todayAtX = gregorian.dateFromComponents(dateComponents)
     return todayAtX!
}



回答5:


Just bringing together some of the Objective C answers, I (now) have this helper function:

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


来源:https://stackoverflow.com/questions/4798096/initialize-a-nsdate-object-with-a-specific-time

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!