将时间转换为HH:MM

时间:2015-04-16 18:21:04

标签: objective-c nsdate

我目前有浮动值,如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]];
    }

但我知道这是不好的做法。将这些数字转换为次数的更好方法是什么?

3 个答案:

答案 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]);