2011-01-25 39 views
8

Tôi có time ở định dạng string ví dụ 2:00. Tôi muốn khởi tạo nó thành NSDate với hiện tại date. Tôi đã thử làmKhởi tạo đối tượng NSDate với thời gian cụ thể

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

Tôi không thể so sánh điều này với đối tượng ngày tháng. Xin vui lòng giúp

Trả lời

30

Hãy thử

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

Bạn sẽ có thể so sánh với ngày sau đó.

Có thể bạn muốn nói điều gì đó tương tự. Tôi nghĩ rằng sẽ thiết lập bằng cách sử dụng ngày hôm nay và sau đó bạn có thể tạo NSDateComponents từ đó và thiết lập giá trị thời gian.

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

Cảm ơn bạn đã trả lời.Đó là một cách để thiết lập điều này chỉ với thành phần thời gian mà ngày cần phải là ngày hiện tại. Chỉ có thể thay đổi thành phần thời gian của đối tượng Date được khởi tạo bằng NSDate * mydate = [NSDate date] ; – agupta

+0

Tôi nghĩ bạn có ý nghĩa như thế này. – menapole

+0

Có Cảm ơn bạn đã trả lời nhanh chóng. – agupta

2

Bạn cần phải sử dụng một đối tượng NSCalendar để chuyển đổi NSDateComponents một NSDate. Xem tài liệu của Apple trên Creating a Date from Components.

+0

Cảm ơn bạn đã trả lời.Chúng tôi có thể đặt thành phần thời gian của NSDate.I có thể nhận đối tượng NSDate được khởi tạo để hiển thị ngày và giờ. Có thể thay đổi thành phần thời gian sau đó không. – agupta

+0

Sử dụng cùng một lịch để chuyển NSD thành NSDateComponents, sau đó đặt thời gian, sau đó sử dụng lịch để biến nó trở lại thành một NSDate. –

+0

Cảm ơn bạn lần nữa vì đã trả lời. – agupta

3

Để khởi tạo NSDate với ngày hiện tại là 2, bạn sẽ phải chia một NSDate với các thành phần năm, tháng và ngày, ví dụ:

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

Đặt giờ để 2

weekdayComponents.hour = 2; 

Và sau đó tạo ra một NSDate mới bằng những thành phần

NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents]; 
1
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! 
} 
0

Chỉ cần mang cùng một số C câu trả lời khách quan, tôi (bây giờ) có chức năng trợ giúp này:

+ (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; 
} 
Các vấn đề liên quan