2014-02-15 2 views
-1

У меня есть счетчик, вы устанавливаете дату, а затем можете получить время до этой даты, но мне нужно отобразить его в выбранном формате.Таймер - отсчет и отображение результата в определенном формате

EG: Если у меня есть 1 день, 13 часов, 43 минут и 30 секунд до конца, и установить формат:

«У вас есть: # d # дней, # ч # ч, # м # минут, чтобы умереть»

Тогда просто показать:

"у вас есть 1 день, 13 часов, 43 минут, чтобы умереть"

Но если вы установите формат:

"У вас есть: # ч # ч, # м # минут, чтобы умереть"

Тогда мне нужно дисплей:

" У вас есть 37 часов, 43 минуты, чтобы умереть »

(так что отсутствующий тип (дни) преобразуются в другие (часы))


У меня есть этот код: PS: S, M, H, D, W, что как раз второй в миллисекундах, минуты в миллисекундах и т.д. ...

public static String getTimerData(long time, String format) { 
    int seconds = -1, minutes = -1, hours = -1, days = -1, weeks = -1; 
    if (format.contains("#s#")) { 
     seconds = (int) (time/S); 
    } 
    if (format.contains("#m#")) { 
     if (seconds == -1) { 
      minutes = (int) (time/M); 
     } else { 
      minutes = (seconds/60); 
      seconds %= 60; 
     } 
    } 
    if (format.contains("#h#")) { 
     if (minutes == -1) { 
      hours = (int) (time/H); 
     } else { 
      hours = (minutes/60); 
      minutes %= 60; 
     } 
    } 
    if (format.contains("#d#")) { 
     if (hours == -1) { 
      days = (int) (time/D); 
     } else { 
      days = (hours/24); 
      hours %= 24; 
     } 
    } 
    if (format.contains("#w#")) { 
     if (days == -1) { 
      weeks = (int) (time/W); 
     } else { 
      weeks = (days/7); 
      days %= 7; 
     } 
    } 
    return format.replace("#w#", Integer.toString(weeks)).replace("#d#", Integer.toString(days)).replace("#h#", Integer.toString(hours)).replace("#m#", Integer.toString(minutes)).replace("#s#", Integer.toString(seconds)); 
} 

И ... лучше способ сделать это?

ответ

3
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd"); 
String text = date.toString(formatter); 
LocalDate date = LocalDate.parse(text, formatter); 

подробнее here

или, если вы не используете java8 here

+0

Мне нужно что-то, не используя другой API. (Я пишу что-то маленькое и только как дополнение) – user2250333

+0

Java 8 не является «другим API». – bobbel

+0

Ach ... Я думал, что это «джода-время».Но я должен использовать java 7;/ – user2250333

1

Joda-Time

Если ваша цель состоит в том, что слова, правописание из «1 день, 13 часов, и 43 минуты ", то Joda-Time имеет класс именно для этой цели: PeriodFormatterBuilder. С помощью этого класса проще пробовать писать свои собственные. См. Примеры в других ответах, таких как this one и this one.

java.time. *

Новый java.time.* package в Java 8 может иметь что-то подобное, учитывая, что оно вдохновляется Joda-Time. Возможно, класс DateTimeFormatterBuilder в java.time.format package.

Смежные вопросы