Конвертировать секунды в W,D,H,M формат в JAVA

У меня есть время в секундах, я хочу преобразовать это в формат как 6w 3d 9h 5m . Может кто-нибудь, пожалуйста, предоставьте метод, который может выполнить эту задачу. Спасибо:) w= недели d= дни h= часы m= минуты

Я пробовал приведенный ниже код, но я не получаю недели, используя

int day = (int)TimeUnit.SECONDS.toDays(seconds);        
long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.SECONDS.toHours(TimeUnit.SECONDS.toDays(seconds));
long minute = TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.SECONDS.toMinutes(TimeUnit.SECONDS.toHours(seconds));
System.out.println("Day :"+day+" Hours :"+hours+" Minutes :"+minute); 

2 ответа

Решение
int seconds=98765410;
int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7);
int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks);
long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) - TimeUnit.DAYS.toHours(7*weeks);
long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60);
System.out.println(weeks+"w "+days+"d "+hours+"h "+minutes+"m");

Распечатает:

163w 2d 2h 50m

Это даст вам:

1w 4d 10h 20m

Должен быть более элегантный способ, но это работает:

long s = 987654l;
        final long M=60,H=60*M, D=24*H, W=7*D; 
        long w = s/W;
        s%=W; 
        long d = s/D;
        s%=D; 
        long h = s/H;
        s%=H; 
        long m = s/M;

        System.out.printf("%dw %dd %dh %dm",w,d,h,m);
Другие вопросы по тегам