24小时和12小时之间更优雅的模数转换?

时间:2013-09-22 02:57:27

标签: math modulo

将24小时时间(如军事时间)转换为12小时(时钟面)时间似乎是使用模运算符的理想场所,但我无法找出一种纯粹的数学方法来映射0到12 (所以有1到12小时而不是0到11小时)。我能想到的最好的是(在Ruby中)

modHour = militaryHour % 12
if modHour == 0
  clockHour = 12
else
  clockHour = modHour
end

,或者

hours = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
clockHour = hours[ militaryHour % 12 ]

似乎必须有某种方法可以用数学方法完成这种转变,但我无法弄明白。

3 个答案:

答案 0 :(得分:3)

(原谅我的Python ......)

>>> for hr in range (24):
...   print hr, (hr + 11) % 12 + 1
... 
0 12
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 1
14 2
15 3
16 4
17 5
18 6
19 7
20 8
21 9
22 10
23 11

答案 1 :(得分:2)

我认为

hour12 = 12 - ((- hour24) % 12)

应该有用。

答案 2 :(得分:0)

Eric Jablow的回答对我来说没有正确的答案。我发现此内联函数虽然有效。

int militaryTime = 14;
int civilianTime = ((24hr - 1) % 12) + 1;