2

好的,所以我有一个时钟类,它最初设置为 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;
}
4

3 回答 3

3

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我指的是整数模数(%Java 中的运算符)。

更新:您需要做的就是将您的 24 小时值转换hours.getValue()12 小时等值以进行显示。类似于以下内容:

// Not correct Java!
string meridianNess = (hours.getValue()/12==0?"AM":"PM");
int h = hours.getValue()%12;
if (h==0) h = 12;
System.out.print(h+":"+new NumberFormat("00").format(minutes.getValue())+":"+
    new NumberFormat("00").format(seconds.getValue())+" "+meridianNess);
于 2013-01-28T03:39:57.063 回答
1

一个很好的简洁公式是添加 11,然后取“模 12”,然后再添加一个:

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

IE

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

这可以为任何值(包括 hours=0、hours=12 等)提供所需的结果。

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

于 2015-03-11T08:29:17.467 回答
0

尝试将24小时时间转换为秒,那么它应该很容易......

于 2013-01-28T03:20:56.493 回答