Получение времени в текстовом представлении
- import java.util.Calendar;
- public class TimeSpeakerUtil {
- private static final String[] NORMAL_1_TO_20 = {
- "Двенадцать", "Один", "Два", "Три", "Четыре", "Пять", "Шесть", "Семь",
- "Восемь", "Девять", "Десять", "Одиннадцать", "Двенадцать",
- "Тринадцать", "Четырнадцать", "Пятнадцать", "Шестнадцать",
- "Семнадцать", "Восемнадцать", "Девятнадцать", "Двадцать"
- };
- private static final String[] NAMES_TEN = {
- "Десять", "Двадцать", "Тридцать", "Сорок", "Пятьдесят"
- };
- private static final String[] NAMES_1_2 = {
- "Одна", "Две"
- };
- private static final String[] NAMES_HOUR = {
- "Час", "Часа", "Часов"
- };
- private static final String[] NAMES_MINUTE = {
- "Минут", "Минута", "Минуты"
- };
- public static String getTimeString() {
- final StringBuffer sb = new StringBuffer();
- final Calendar cal = Calendar.getInstance();
- // Час
- final int hour = cal.get(Calendar.HOUR_OF_DAY);
- appendHourString(sb, hour);
- // Минута
- final int minute = cal.get(Calendar.MINUTE);
- appendMinuteString(sb, minute);
- return sb.toString();
- }
- private static void appendHourString(StringBuffer sb, int hour) {
- int minHour = Math.min(hour, 20);
- sb.append(NORMAL_1_TO_20[minHour]); // 0..20
- if (hour > 20) sb.append(NORMAL_1_TO_20[hour % 20]); //21..23
- // Час
- if ( (hour == 1) || (hour == 21) ) sb.append(NAMES_HOUR[0]);
- else if ( ((1 < hour) && (hour <= 4)) || ((21 < hour) && (hour <= 23)) ) sb.append(NAMES_HOUR[1]);
- else sb.append(NAMES_HOUR[2]);
- }
- private static void appendMinuteString(StringBuffer sb, int minute) {
- // Ноль минут нет
- if (minute == 0) return;
- // От пяти до двадцати одинаково
- if ( (5 <= minute) && (minute <= 20) ) {
- sb.append(NORMAL_1_TO_20[minute]);
- sb.append(NAMES_MINUTE[0]);
- return;
- }
- // Десятки минут
- int tenMinute = minute / 10;
- if (tenMinute != 0) sb.append(NAMES_TEN[tenMinute - 1]);
- int modMinute = minute % 10;
- // Одна минута / две минуты
- if ( (modMinute == 1) || (modMinute == 2) ) {
- sb.append(NAMES_1_2[modMinute - 1]);
- sb.append(NAMES_MINUTE[modMinute]);
- return;
- }
- // без десятков
- if (modMinute != 0) sb.append(NORMAL_1_TO_20[modMinute]);
- // x2, x3, x4 минуты
- if ( (2 <= modMinute) && (modMinute <= 4) ) sb.append(NAMES_MINUTE[2]);
- else sb.append(NAMES_MINUTE[0]); // минут
- }
- }