从今天的date构build一个NSDate和一个string与时间
如果我有一个表示时间的string,比如说“10:45 am”,那么执行以下操作来parsingstring:
NSDateFormatter *dateFormat; dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"h:mm a"]; NSLog(@"%@", [dateFormat dateFromString:@"10:45 AM"]);
我会得到这个logging:
2013-09-09 17:52:30.416 TimeTest [49491:a0b] 2000-01-01 15:45:00 +0000
如何在给定的时间创build当天的NSDate
? 我试过这个
NSDate *date = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"h:mm a"]; NSDate *time = [formatter dateFromString:@"10:45 AM"]; NSDateComponents *timeComponents = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit ) fromDate:time]; NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date]; NSDateComponents *newComponents = [[NSDateComponents alloc]init]; newComponents.timeZone = [NSTimeZone systemTimeZone]; [newComponents setDay:[dateComponents year]]; [newComponents setMonth:[dateComponents month]]; [newComponents setYear:[dateComponents year]]; [newComponents setHour:[timeComponents hour]]; [newComponents setMinute:[timeComponents minute]]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *combinedDate = [gregorianCalendar dateFromComponents:newComponents]; NSLog(@"%@", combinedDate);
结果
2013-09-09 19:57:14.506 TimeTest [49712:a0b] 2019-03-06 15:45:00 +0000
我应该怎么做呢?
我不完全确定你在找什么。 据我所知,你想build立一个date与当前的年,月和日,但与您提供的时间parsing它从一个string。 如果是这样的话,正如其他人所指出的,你需要玩NSDateComponents。
根据你的代码,我写了这些行。 他们应该通过合并两个date来build立一个date。 当前的和你分析的一个。
// Get the full current date NSDate *date = [NSDate date]; // Get the current calendar NSCalendar *calendar = [NSCalendar currentCalendar]; // Split the date into components but only take the year, month and day and leave the rest behind NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date]; // Build the date formatter NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"h:mm a"]; // Convert the string time into an NSDate NSDate *time = [formatter dateFromString:@"10:45 AM"]; // Split this one in components as well but take the time part this time NSDateComponents *timeComponents = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit ) fromDate:time]; // Do some merging between the two date components dateComponents.hour = timeComponents.hour; dateComponents.minute = timeComponents.minute; // Extract the NSDate object again NSDate *result = [calendar dateFromComponents:dateComponents]; // Check if this was what you where looking for NSLog(@"%@",result);
请注意,这个示例代码目前还没有进行优化。 有更清晰的方式来获得你正在寻找的时间间隔,但我觉得你想要一个简单的例子,如何做组件复制和粘贴,然后提取date。
这将在当前时区中创build一天的开始date。
NSDate *today = [NSDate date]; NSTimeInterval interval; NSCalendar *cal = [NSCalendar currentCalendar]; [cal rangeOfUnit:NSDayCalendarUnit startDate:&today interval:&interval forDate:today];
现在我们添加时间:
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
现在是今天上午10:45在当地的时区。
在debugging器中进行控制:
po dateAndTime $0 = 0x41b7df138c00000d 2013-09-10 08:45:00 +0000
这是正确的,因为我的时区比格林威治标准时间早2小时,因为我们还有夏令时。