Получение времени в текстовом представлении

  1. import java.util.Calendar;
  2.  
  3. public class TimeSpeakerUtil {
  4.  
  5.     private static final String[] NORMAL_1_TO_20 = {
  6.         "Двенадцать", "Один", "Два", "Три", "Четыре", "Пять", "Шесть", "Семь",
  7.         "Восемь", "Девять", "Десять", "Одиннадцать", "Двенадцать",
  8.         "Тринадцать", "Четырнадцать", "Пятнадцать", "Шестнадцать",
  9.         "Семнадцать", "Восемнадцать", "Девятнадцать", "Двадцать"
  10.     };
  11.  
  12.     private static final String[] NAMES_TEN = {
  13.         "Десять", "Двадцать", "Тридцать", "Сорок", "Пятьдесят"
  14.     };
  15.  
  16.     private static final String[] NAMES_1_2 = {
  17.         "Одна", "Две"
  18.     };
  19.  
  20.     private static final String[] NAMES_HOUR = {
  21.         "Час", "Часа", "Часов"
  22.     };
  23.  
  24.     private static final String[] NAMES_MINUTE = {
  25.         "Минут", "Минута", "Минуты"
  26.     };
  27.  
  28.     public static String getTimeString() {
  29.         final StringBuffer sb = new StringBuffer();
  30.         final Calendar cal = Calendar.getInstance();
  31.         // Час
  32.         final int hour = cal.get(Calendar.HOUR_OF_DAY);
  33.         appendHourString(sb, hour);
  34.         // Минута
  35.         final int minute = cal.get(Calendar.MINUTE);
  36.         appendMinuteString(sb, minute);
  37.         return sb.toString();
  38.     }
  39.  
  40.     private static void appendHourString(StringBuffer sb, int hour) {
  41.         int minHour = Math.min(hour, 20);
  42.         sb.append(NORMAL_1_TO_20[minHour]); // 0..20
  43.         if (hour > 20) sb.append(NORMAL_1_TO_20[hour % 20]); //21..23
  44.         // Час
  45.         if ( (hour == 1) || (hour == 21) ) sb.append(NAMES_HOUR[0]);
  46.         else if ( ((1 < hour) && (hour <= 4)) || ((21 < hour) && (hour <= 23)) ) sb.append(NAMES_HOUR[1]);
  47.         else sb.append(NAMES_HOUR[2]);
  48.     }
  49.  
  50.     private static void appendMinuteString(StringBuffer sb, int minute) {
  51.         // Ноль минут нет
  52.         if (minute == 0) return;
  53.  
  54.         // От пяти до двадцати одинаково
  55.         if ( (5 <= minute) && (minute <= 20) ) {
  56.             sb.append(NORMAL_1_TO_20[minute]);
  57.             sb.append(NAMES_MINUTE[0]);
  58.             return;
  59.         }
  60.  
  61.         // Десятки минут
  62.         int tenMinute = minute / 10;
  63.         if (tenMinute != 0) sb.append(NAMES_TEN[tenMinute - 1]);
  64.  
  65.         int modMinute = minute % 10;
  66.         // Одна минута / две минуты
  67.         if ( (modMinute == 1) || (modMinute == 2) ) {
  68.             sb.append(NAMES_1_2[modMinute - 1]);
  69.             sb.append(NAMES_MINUTE[modMinute]);
  70.             return;
  71.         }
  72.         // без десятков
  73.         if (modMinute != 0) sb.append(NORMAL_1_TO_20[modMinute]);
  74.  
  75.         // x2, x3, x4 минуты
  76.         if ( (2 <= modMinute) && (modMinute <= 4) ) sb.append(NAMES_MINUTE[2]);
  77.         else sb.append(NAMES_MINUTE[0]); // минут
  78.     }
  79. }

Реклама

Мы в соцсетях

tw tg yt gt