我目前有浮动值,如12.5,4,17.5。我希望这些符合时间12:30 PM,4:00 AM和5:30 PM。
我目前通过黑客获得了与此相近的东西
if (time > 12.5) {
time = abs(roundedValue - 12);
[lab setText:[NSString stringWithFormat:@"%i:00PM",(int)time]];
} else {
[lab setText:[NSString stringWithFormat:@"%i:00AM",(int)time]];
}
但我知道这是不好的做法。将这些数字转换为次数的更好方法是什么?
答案 0 :(得分:2)
这只是基本的数学,你有一个值,比如12.5,它包含数小时12,小时0.5分。一小时有60分钟,所以分钟数只是60分。
如果你想使用12小时制,那就有一个小小的怪癖,小时> 12需要减少12,但中午(12)是下午和午夜(0或24)是上午。所以am / pm的测试与是否减去12的测试不同。
这是一种方法(最小化检查):
NSString *hoursToString(double floatHours)
{
int hours = trunc(floatHours); // number of hours
int mins = round( (floatHours - hours) * 60 ); // mins is the fractional part times 60
// rounding might result in 60 mins...
if (mins == 60)
{
mins = 0;
hours++;
}
// we haven't done a range check on floatHours, also the above can add 1, so reduce to 0 -> 23
hours %= 24;
// if you are using 24 hour clock you can finish here and format to the two values
BOOL pm = hours >= 12; // 0 - 11 = am, 12 - 23 = pm
if (hours > 12) hours -= 12; // 13 - 23 -> 1 -> 11
return [NSString stringWithFormat:@"%d:%02d %s", hours, mins, (pm ? "pm" : "am")];
}
你简单地称之为:
hoursToString(13.1) // returns 1:06 pm
无需使用NSDate
等。
HTH
答案 1 :(得分:0)
通过执行以下操作解决:
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[components setHour:0];
NSDate *today10am = [calendar dateFromComponents:components];
NSDate *newDate = [NSDate dateWithTimeInterval:roundedValue*60*60 sinceDate:today10am];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"h:mm aa"];
[lab setText:[dateFormat stringFromDate:newDate]];
抱歉Hot Licks,猜测这是我的理解。
答案 2 :(得分:-3)
您可以使用以下内容 -
NSNumber *time = [NSNumber numberWithDouble:([yourTime doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];
NSDate *yourDate = [NSDate date];
yourDate = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSLog(@"result: %@", [dateFormatter stringFromDate:yourDate]);