Here you can find the source of formatElapsedTime(StringBuilder recycle, String format, long hours, long minutes, long seconds)
private static String formatElapsedTime(StringBuilder recycle, String format, long hours, long minutes, long seconds)
/*// w w w .j ava2 s .c om * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import com.android.internal.R; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import java.util.Calendar; import java.util.Date; import java.util.Formatter; import java.util.GregorianCalendar; import java.util.Locale; import java.util.TimeZone; public class Main{ private static final Object sLock = new Object(); private static Configuration sLastConfig; private static java.text.DateFormat sStatusTimeFormat; private static String sElapsedFormatMMSS; private static String sElapsedFormatHMMSS; private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d"; private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d"; private static final char TIME_PADDING = '0'; private static final char TIME_SEPARATOR = ':'; /** * Formats an elapsed time in the form "MM:SS" or "H:MM:SS" * for display on the call-in-progress screen. * @param elapsedSeconds the elapsed time in seconds. */ public static String formatElapsedTime(long elapsedSeconds) { return formatElapsedTime(null, elapsedSeconds); } /** * Formats an elapsed time in the form "MM:SS" or "H:MM:SS" * for display on the call-in-progress screen. * * @param recycle {@link StringBuilder} to recycle, if possible * @param elapsedSeconds the elapsed time in seconds. */ public static String formatElapsedTime(StringBuilder recycle, long elapsedSeconds) { initFormatStrings(); long hours = 0; long minutes = 0; long seconds = 0; if (elapsedSeconds >= 3600) { hours = elapsedSeconds / 3600; elapsedSeconds -= hours * 3600; } if (elapsedSeconds >= 60) { minutes = elapsedSeconds / 60; elapsedSeconds -= minutes * 60; } seconds = elapsedSeconds; String result; if (hours > 0) { return formatElapsedTime(recycle, sElapsedFormatHMMSS, hours, minutes, seconds); } else { return formatElapsedTime(recycle, sElapsedFormatMMSS, minutes, seconds); } } /** * Fast formatting of h:mm:ss */ private static String formatElapsedTime(StringBuilder recycle, String format, long hours, long minutes, long seconds) { if (FAST_FORMAT_HMMSS.equals(format)) { StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } sb.append(hours); sb.append(TIME_SEPARATOR); if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); return sb.toString(); } else { return String.format(format, hours, minutes, seconds); } } /** * Fast formatting of m:ss */ private static String formatElapsedTime(StringBuilder recycle, String format, long minutes, long seconds) { if (FAST_FORMAT_MMSS.equals(format)) { StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); return sb.toString(); } else { return String.format(format, minutes, seconds); } } private static void initFormatStrings() { synchronized (sLock) { initFormatStringsLocked(); } } private static char toDigitChar(long digit) { return (char) (digit + '0'); } private static void initFormatStringsLocked() { Resources r = Resources.getSystem(); Configuration cfg = r.getConfiguration(); if (sLastConfig == null || !sLastConfig.equals(cfg)) { sLastConfig = cfg; sStatusTimeFormat = java.text.DateFormat .getTimeInstance(java.text.DateFormat.SHORT); sElapsedFormatMMSS = r .getString(com.android.internal.R.string.elapsed_time_short_format_mm_ss); sElapsedFormatHMMSS = r .getString(com.android.internal.R.string.elapsed_time_short_format_h_mm_ss); } } }