2015-11-07 155 views
0

所以我有一系列的时间:以小时,分钟总计时间

ArrayList<String> times = new ArrayList<String>(); 
times.add("1240"); 
times.add("1028"); 
times.add("0923"); 
times.add("2023"); 

我wan't找到这些时间之间经过的总时间,但我无法弄清楚如何!

例如:

“1240年至1028年” 将是11hrs20 + 10hrs28旅行时间。

从一天的12点40分到第二天10点28分,你需要11点20分(去午夜),然后10点28分。挺清楚的。

+2

你能解释一下,你如何计算“这些时间之间的总小时数”?目前还不清楚你如何从旅行时间获得“11小时20 + 10小时28”。从“1240到1028”。 – Tunaki

+1

从一天的12点40分到第二天的10点28分,你需要11点20分(去午夜),然后10点28分。挺清楚的。 –

+0

@MateoBarahona感谢清理那个哈哈^^ – madcrazydrumma

回答

1

首先,我们需要一种方法来将字符串转换成线性时间表示:

// Given a string of the form HHMM, this returns the number of minutes after midnight. 
// For example: timeStringToMinutes("0000") -> 0. 
// timeStringToMinutes("0015") -> 15. 
// timeStringToMinutes("0100") -> 60. 
// timeStringToMinutes("0837") -> 517. 
// timeStringToMinutes("2359") -> 1439. 
static int timeStringToMinutes(String s) { 
    return Integer.parseInt(s.substring(0, 2)) * 60 + Integer.parseInt(s.substring(2, 4)); 
} 

接下来,我们定义一个函数来计算时间的差异:

// Example: forwardNumberOfMinutes("1240", "1028") -> 1308. 
static int forwardNumberOfMinutes(String start, String end) { 
    int from = timeStringToMinutes(start); 
    int to = timeStringToMinutes(end); 
    if (to < from) 
     to += 1440; // 1 day, or 24 hours 
    return to - from; 
} 

最后,我们定义一个函数将线性时间转换为小时和分钟:

// Example: minutesToTimeString(1308) -> "2148" (21 hr 48 min). 
static minutesToTimeString(int n) { 
    return String.format("%02d%02d", n/60, n % 60); 
} 
+0

完美的作品!但是,所以我理解代码,为什么你这样做: 'to + = 1440;'代表一天? – madcrazydrumma

+0

假设你有'start =“2310”'和'end =“0040”'。我们计算'from = 1390'和'to = 40'。 – Nayuki

+0

如果我们只计算'from - from = -1350',这不是我们想要的。所以我们把'去'推到第二天,在'= 1480'。 – Nayuki