如何改变天文台的格式?

时间:2010-11-11 08:33:25

标签: android

我的一个问题是在android中更改计时器的格式。 我有问题,天文台显示其00:00格式的时间,我希望它以00:00:00格式出现。有人知道答案吗?

7 个答案:

答案 0 :(得分:38)

这是一个简单而智能的解决方案,适用于时间格式00:00:00 in android

中的计时器
Chronometer timeElapsed  = (Chronometer) findViewById(R.id.chronomete);
timeElapsed.setOnChronometerTickListener(new OnChronometerTickListener(){
        @Override
            public void onChronometerTick(Chronometer cArg) {
            long time = SystemClock.elapsedRealtime() - cArg.getBase();
            int h   = (int)(time /3600000);
            int m = (int)(time - h*3600000)/60000;
            int s= (int)(time - h*3600000- m*60000)/1000 ;
            String hh = h < 10 ? "0"+h: h+"";
            String mm = m < 10 ? "0"+m: m+"";
            String ss = s < 10 ? "0"+s: s+"";
            cArg.setText(hh+":"+mm+":"+ss);
        }
    });
    timeElapsed.setBase(SystemClock.elapsedRealtime());
    timeElapsed.start();

答案 1 :(得分:17)

我正在处理同样的问题。实现这一目标的最简单方法是覆盖Chronometer的updateText方法,但不幸的是它是一种私有方法,所以我这样做了:

    mChronometer.setText("00:00:00");
    mChronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {

        @Override
        public void onChronometerTick(Chronometer chronometer) {
            CharSequence text = chronometer.getText();
            if (text.length()  == 5) {
                chronometer.setText("00:"+text);
            } else if (text.length() == 7) {
                chronometer.setText("0"+text);
            }
        }
    });

我知道编写自定义小部件会更好,但对于小型项目,它可能更合适。

在天文台上设置格式允许使用 DateUtils.formatElapsedTime 格式化围绕实际时间和时间的格式文本。

希望有所帮助。

答案 2 :(得分:2)

计时器setFormat方法用于添加格式化文本,如:

  

“从开始时间%s”

结果

  

“从开始时间00:00”

在天文台中,您无法选择格式HH:MM:SS或MM:SS。

答案 3 :(得分:2)

// You can use this code. Setting the format and removing it
//Removing the format (write this in oncreate)
if (mChronometerformat) {
    mSessionTimeChro.setOnChronometerTickListener(new OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            if (chronometer.getText().toString()
                    .equals("00:59:59"))
                chronometer.setFormat(null);

        }
    });
}
// Setting the format
mSessionTimeChro.setBase(SystemClock.elapsedRealtime());
if (diffHours == 0) {
    mSessionTimeChro.setFormat("00:%s");
    mChronometerformat = true;
}
mSessionTimeChro.start();

答案 4 :(得分:1)

我正在使用这种格式的倒计时器,但它适用于HH:MM:SS。这是你在找什么或者你在寻找MM:SS:毫秒。您可以使用此代码并使其从0开始计数而不是向下计数。链接在这里 - Formatting countdown timer with 00:00:00 not working. Displays 00:00:00 until paused then displays the time remaining 这可能会有所帮助 - Show milliseconds with Android Chronometer

答案 5 :(得分:1)

为什么不使用Date类?

timeElapsed.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
    @Override
    public void onChronometerTick(Chronometer cArg) {
        long time = SystemClock.elapsedRealtime() - cArg.getBase();
        Date date = new Date(time);
        DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        String dateFormatted = formatter.format(date);
        cArg.setText(dateFormatted);
    }
});

简单干净

答案 6 :(得分:1)

Kotlin 中,找到了一个更好的解决方案,每秒都没有为字符串分配内存

cm_timer.format = "00:%s"
cm_timer.setOnChronometerTickListener({ cArg ->
            val elapsedMillis = SystemClock.elapsedRealtime() - cArg.base
            if (elapsedMillis > 3600000L) {
                cArg.format = "0%s"
            }
            else {
                cArg.format = "00:%s"
            }
        })

其中cm_timerChronometer