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

问题描述 投票:2回答:3

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

似乎必须有一些方法来数学地完成这种转变,但我无法弄明白。

math modulo
3个回答
2
投票

我认为

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

应该管用。


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

0
投票

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

int militaryTime = 14;
int civilianTime = ((24hr - 1) % 12) + 1;
© www.soinside.com 2019 - 2024. All rights reserved.