Ir para conteúdo

[Util] TimeFormatter.class - Formate tempo em String.


Pica-Pau

Posts Recomendados

Outra classe de tempo, desta vez de formatar tempo.
Ex: 3 minutos; 1 hora e 40 minutos

 

package me.devnatan.apis.time;

import java.util.concurrent.TimeUnit;

/**
 * 
 * © DevNatan, 2017. Todos os direitos reservados
 * 
 * @since 2017
 * @version 1.0
 * @author DevNatan
 *
 * Plugin de Bibliotecas Oficial.
 * Desenvolvido por DevNatan.
 * 
 * Conversor de milisegundos para linha legível.
 *   
 */
public class TimeFormatter {

	private long tempo;
	
	public TimeFormatter(long tempo) {
		this.tempo = tempo;
	}
	
	public long getTempo() {
		return tempo;
	}
	
	public String format() {
		if (tempo == 0)
			return "agora mesmo";

		long dias = TimeUnit.MILLISECONDS.toDays(tempo);
		long horas = TimeUnit.MILLISECONDS.toHours(tempo) - (dias * 24);
		long minutos = TimeUnit.MILLISECONDS.toMinutes(tempo) - (TimeUnit.MILLISECONDS.toHours(tempo) * 60);
		long segundos = TimeUnit.MILLISECONDS.toSeconds(tempo) - (TimeUnit.MILLISECONDS.toMinutes(tempo) * 60);
		
		StringBuilder sb = new StringBuilder();
		
		if(dias > 0)
			sb.append(dias + (dias == 1 ? " dia" : " dias"));
		
		if(horas > 0)
			sb.append(dias > 0 ? (minutos > 0 ? ", " : " e ") : "").append(horas + (horas == 1 ? " hora" : " horas"));
		
		if(minutos > 0)
			sb.append(dias > 0 || horas > 0 ? (segundos > 0 ? ", " : " e ") : "").append(minutos + (minutos == 1 ? " minuto" : " minutos"));
		
		if(segundos > 0)
			sb.append(dias > 0 || horas > 0 || minutos > 0 ? " e " : (sb.length() > 0 ? ", " : "")).append(segundos + (segundos == 1 ? " segundo" : " segundos"));
		
		String s = sb.toString();
		return s.isEmpty() ? "agora mesmo" : s;
	}
	
	public static String format(long tempo) {
		return new TimeFormatter(tempo).format();
	}
	
}
 

 

 

Exemplificação simples:

long d = TimeUnit.DAYS.toMillis(1);
				long h = TimeUnit.HOURS.toMillis(12);
				long m = TimeUnit.MINUTES.toMillis(30);
				long s = TimeUnit.SECONDS.toMillis(45);
				
				getLogger().info("Convertendo...");
				getLogger().info("  " + TimeFormatter.format(d));
				getLogger().info("  " + TimeFormatter.format(h));
				getLogger().info("  " + TimeFormatter.format(m));
				getLogger().info("  " + TimeFormatter.format(s));
				getLogger().info("  " + TimeFormatter.format(d + h));
				getLogger().info("  " + TimeFormatter.format(h + m));
				getLogger().info("  " + TimeFormatter.format(m + s));
				getLogger().info("  " + TimeFormatter.format(d + h + m));
				getLogger().info("  " + TimeFormatter.format(h + m + s));
				getLogger().info("  " + TimeFormatter.format(d + h + m + s));

Resultado:

[19:55:49 INFO]: [NtLibs] Convertendo...
[19:55:49 INFO]: [NtLibs]   1 dia
[19:55:49 INFO]: [NtLibs]   12 horas
[19:55:49 INFO]: [NtLibs]   30 minutos
[19:55:49 INFO]: [NtLibs]   45 segundos
[19:55:49 INFO]: [NtLibs]   1 dia e 12 horas
[19:55:49 INFO]: [NtLibs]   12 horas e 30 minutos
[19:55:49 INFO]: [NtLibs]   30 minutos e 45 segundos
[19:55:49 INFO]: [NtLibs]   1 dia, 12 horas e 30 minutos
[19:55:49 INFO]: [NtLibs]   12 horas, 30 minutos e 45 segundos
[19:55:49 INFO]: [NtLibs]   1 dia, 12 horas, 30 minutos e 45 segundos
Editado por Pica-Pau
Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...