字时钟 - 最有效的告诉时间的方法

时间:2016-01-23 18:46:17

标签: java android

假设您正在尝试创建此时钟:

enter image description here

我有TimerTask,每10秒返回int hourint minute

我遇到的第一个解决方案是多个switch语句,但这很快就会失控。它可以工作,但可能有一个更优雅的解决方案来处理所有不同的情况。你有更好的想法吗?

所有建议都表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

你可以选择开关它完全可行,但你可以把钟面分成12块,然后没有任何开关声明。

boolean past = true;
int i = (minutes + 2) / 5; // +2 because if it's 58 min past 7 you wanna get 8 o'clock

if(i > 6){  //we're on the left side of clock face
i = 12 - i; 
hours++;   
past = false;
   }
}

您所要做的就是添加switch语句或包含正确字符串值的索引数组。例如:

String[] array = {"", "five minutes", "ten minutes", "quater", "twenty minutes", "twenty five minutes", "half"};
String result = "It is " + array[i] + ((i!=0)?(past? " past ":" to "):"" + hours_array[hours] + (i==0)?" o'clock":"";

答案 1 :(得分:1)

让我为你分组吧。

“它是”和“点”是固定的。不要包括它们 半 - 十 - 四 - 二十五:是第一组 分钟 - 过去:是第二组 一 - 三 - 二 - 四 - 五 - 六 - 七 - 八 - 九 - 十 - 十一 - 十二:是第三组

所以让我们从第二组开始。如果分钟小于30“过去”,如果更多“分钟”是真的 然后,如果“过去”为真,则第一组指示分钟(分钟 - 分钟%5),如果“分钟到”为真,则第一组指示为60分钟。
此外,如果“过去”为真,则第三组表示小时,但如果“分钟到”为真,则第三组表示小时+ 1。

        Date date = new Date();
        int hours = date.getHours();
        if (hours==0) hours = 12;
        if (hours>12) hours -= 12;
        int minutes = date.getMinutes();
        minutes -= minutes%5;
        // minutes could be more accurate
        if (minutes<30) {

            switch (minutes) {
            case 5:
                // turn on five
                break;
            case 10:
                // turn on ten
                break;
            case 15:
                // turn on quarter
                break;
            case 20:
                // turn on twenty
                break;
            case 25:
                // turn on twenty and five
                break;
            }
            // turn on "past"
            // put a switch here for the hours
        } else if (minutes == 30) { 
            // turn on half and past
            // put a switch here for the hours
        } else { // turn on "minutes to"
            switch (minutes) {
            case 35:
                // turn on twenty and five
                break;
            case 40:
                // turn on twenty
                break;
            case 45:
                // turn on quarter
                break;
            case 50:
                // turn on ten
                break;
            case 55:
                // turn on five
                break;
            // turn on "past"
            // put a switch here for the hours
        }

代码没有完成,但它会给你一个想法。