Constructing an NSDate from today's date and a string with the time

前端 未结 2 1800
無奈伤痛
無奈伤痛 2020-12-20 02:21

If I have a string representing a time, say \"10:45 am\", and do the following to parse the string:

NSDateFormatter *dateFormat;
dateFormat = [[NSDateFormatt         


        
2条回答
  •  情歌与酒
    2020-12-20 02:56

    This will create a date for the beginning of the day in the current time zone.

    NSDate *today = [NSDate date];
    NSTimeInterval interval;
    NSCalendar *cal = [NSCalendar currentCalendar];
    [cal rangeOfUnit:NSDayCalendarUnit
           startDate:&today
            interval:&interval
             forDate:today];
    

    Now we add the time:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // I have to set the locale to posix_en_us, as my system is using 24hour style as default
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    [dateFormatter setDateFormat:@"hh:mm a"];
    NSDate *time = [dateFormatter dateFromString:@"10:45 AM"];
    NSDateComponents *comps = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit)
                                     fromDate:time];
    NSDate *dateAndTime = [cal dateByAddingComponents:comps
                                               toDate:today
                                              options:0];
    

    dateAndTime will now be todays date with 10:45 am in the local timezone.

    controlling in the debugger:

    po dateAndTime
    $0 = 0x41b7df138c00000d 2013-09-10 08:45:00 +0000
    

    This is correct, as my timezone is 2 hours ahead to GMT, as we still have summer time.

提交回复
热议问题