NSDateComponents错误地增加了一个小时

时间:2018-12-12 02:07:50

标签: ios objective-c parsing nsdate nsdatecomponents

我正在尝试在Objective-C中创建一个方法,该方法将从以“ HHmm”格式编写的时间值中获取分钟总数。

例如对于“ 0210”,返回值应为130。

Map<String, String> players = new HashMap<>();
map.put("Kyrie Irving", "Birth date: 23-Mar-92");
map.put("Jayson Tatum", "Birth date: 3-Mar-98");
map.put("Gordon Hayward", "Birth date: 23-Mar-90");
// and so on

问题在于小时的组成部分:它总是要休息一小时。

enter image description here

在这张照片上,NSDate显示了09:22时间,但是在下面的图片上,您可以看到小时部分为10(分钟部分正确设置为22)。

enter image description here

我查看了其他帖子(“ NSDateComponents休息时间”等),但找不到有效的解决方案。知道我在做什么错吗?

1 个答案:

答案 0 :(得分:2)

时区/地区可能不需要加入。我可能会误会,但似乎您只是在尝试采用HHmm格式的字符串并计算总分钟数。

如果出于某些原因仍需要使用NSDate,则可以使用该功能:

+ (int)totalMinutesFromHHmm:(NSString*)HHmm
{
    NSString* refHHmm = @"0000";

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HHmm"];

    NSDate* refDate = [dateFormatter dateFromString:refHHmm];
    NSDate* date = [dateFormatter dateFromString:HHmm];

    int minutes = [date timeIntervalSinceDate:refDate] / 60;

    return minutes;
}

否则,这可能是一个更简单的选择,因为您知道将有一个由4个字符组成的字符串,代表小时和分钟:

+ (int)totalMinutesFromHHmm:(NSString*)HHmm
{
    int minutes = [[HHmm substringWithRange:NSMakeRange(0, 2)] intValue] * 60;
    minutes += [[HHmm substringWithRange:NSMakeRange(2, 2)] intValue];

    return minutes;
}
相关问题