将24小时制转换为12小时制

时间:2013-01-28 03:12:07

标签: java displaytag

好的,所以我有一个时钟类,最初设置为24小时制,但我必须使用这种方法将时钟显示为12小时制!我已经尝试了几个小时,但已经失败了!请帮忙。将时钟显示为12小时制(hh:mm:ss AM / PM)。使用抽象 - 除了updateDisplay()方法之外不要更改任何内容。时钟可以使用“幕后”的军事时间;它只需要在调用getTime()时返回正确的字符串。

private void updateDisplay()
{
    String AM = "AM";
    String PM = "PM";

    if(hours.getValue() == 0) {
        hours.setValue(hours.getValue() + 12);
        PM = "";
    }
    else if(hours.getValue() == 1 < hours.getValue() && hours.getValue() < 11) {
        PM = "";
    }
    else if(hours.getValue() == 12) {
       AM = "";
    }
    else if(hours.getValue() == 13 > 24) {
        hours.setValue(hours.getValue() - 12);
       AM = "";
    }

    displayString = hours.getDisplayValue() + ":" + 
    minutes.getDisplayValue() + ":" +
    seconds.getDisplayValue() + PM + AM;
}

3 个答案:

答案 0 :(得分:3)

<24> 24小时时钟H从0 <= H <= 23开始。如果H div 12为0,则AM,否则为PM。然后12小时时钟h为H mod 12,除非该值为0,在这种情况下h = 12。 您不应该更改显示代码中的值(hours.setValue(...)),也不需要转换为秒。 我认为你的代码问题只是第一个条件语句中的语法问题。

... if(hours.getValue() == 1 < hours.getValue() ... // This is wrong

您将小时值与1进行比较,然后将比较结果与小时数进行比较。这不会在java中编译,因为bool与int无法比较。

注意:当我说div时,我的意思是整数除法(即Java中的截断/运算符),当我说mod时,我的意思是整数模数({{1 Java中的运算符。)

更新: 有点像:

%

答案 1 :(得分:1)

一个很好的简洁公式,适用于添加11,然后取'模12',然后再添加一个:

hours.setValue(((hours.getValue()+11)%12)+1);

h_12 = ( (h_24+11) % 12 ) + 1

这可以为任何值提供所需的结果,包括小时= 0,小时= 12等

(然后当然使用前面提到的AM / PM显示的任何解决方案)

答案 2 :(得分:0)

尝试将24小时转换为秒,然后应该很容易......