2

将 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 ]

似乎必须有某种方法可以在数学上完成这种转变,但我无法弄清楚。

4

3 回答 3

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
于 2013-09-22T03:03:00.660 回答
3

我认为

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

应该管用。

于 2013-09-22T03:14:02.010 回答
0

Eric Jablow 的回答并没有为我提供正确的答案。我发现这个内联函数虽然有效。

int militaryTime = 14;
int civilianTime = ((24hr - 1) % 12) + 1;
于 2019-02-26T01:10:23.630 回答