如何在Objective-C中从HH:mm字符串获取今日对应时分的NSDate对象
解决HH:mm字符串转当日对应NSDate的问题
当仅提供时分格式的字符串时,NSDateFormatter会自动使用默认基准日期(通常为2000-01-01)补全年月日,这就是你得到非当日日期的原因。以下两种方法可以实现需求:
方法一:通过日期组件合并当日日期与目标时分
NSString *dateString = @"21:00"; // 解析时分字符串,提取时分组件 NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; [timeFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; [timeFormatter setDateFormat:@"HH:mm"]; NSDate *timeDate = [timeFormatter dateFromString:dateString]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *timeComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute fromDate:timeDate]; // 获取当日的年月日组件 NSDateComponents *todayComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]]; // 替换时分,设置秒为0 todayComponents.hour = timeComponents.hour; todayComponents.minute = timeComponents.minute; todayComponents.second = 0; // 生成目标NSDate NSDate *targetDate = [calendar dateFromComponents:todayComponents];
方法二:拼接当日日期与时分字符串后解析
NSString *dateString = @"21:00"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; // 获取当日年月日字符串 [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSString *todayDateStr = [dateFormatter stringFromDate:[NSDate date]]; // 拼接完整日期时间字符串 NSString *fullDateStr = [NSString stringWithFormat:@"%@ %@", todayDateStr, dateString]; // 解析完整字符串 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; NSDate *targetDate = [dateFormatter dateFromString:fullDateStr];
注意事项
- 必须设置
locale为en_US_POSIX,避免因系统地区设置导致的24小时制解析异常。 - NSDate存储的是UTC时间,直接打印会显示UTC时区的时间,若要验证本地时间,需用NSDateFormatter将其转换为本地时区的字符串查看。
内容的提问来源于stack exchange,提问作者BigLiao
相关产品推荐
相关产品推荐

