Preciso converter uma quantidade arbitrária de milissegundos em dias, horas, minutos e segundos.
Por exemplo: 10 dias, 5 horas, 13 minutos, 1 segundo.
date
time
string-formatting
datetime-format
FlySwat
fonte
fonte
Respostas:
Bem, já que ninguém mais avançou, vou escrever o código fácil para fazer isso:
Estou feliz que você parou por dias e não perguntou por meses. :)
Observe que no exemplo acima, é assumido que
/
representa a divisão inteira truncada. Se você usar este código em uma linguagem onde/
representa a divisão de ponto flutuante, você precisará truncar manualmente os resultados da divisão conforme necessário.fonte
Seja A a quantidade de milissegundos. Então você tem:
e assim por diante (
%
é o operador de módulo).Espero que isto ajude.
fonte
/
fizer divisão de ponto flutuante, você precisará truncar o valor. É assumido em outras respostas que/
está realizando divisão inteira.Ambas as soluções abaixo usam javascript (eu não tinha ideia de que a solução era independente de linguagem!). Ambas as soluções precisarão ser estendidas se capturar as durações
> 1 month
.Solução 1: usar o objeto Date
Dá:
As bibliotecas são úteis, mas por que usar uma biblioteca se você pode reinventar a roda! :)
Solução 2: escreva seu próprio analisador
Cria um objeto de "duração", com todos os campos de que você precisa. Formatar um carimbo de data / hora se torna simples ...
Dá:
fonte
return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
var nonZero = function(u){ return !u.startsWith("0"); }; // convert object to a string representation... dur.toString = function(){ return units.reverse().map(function(u){ return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label); }).filter(nonZero).join(', '); };
Apache Commons Lang tem um DurationFormatUtils que tem métodos muito úteis como formatDurationWords .
fonte
Você deve usar as funções datetime de qualquer linguagem que esteja usando, mas, apenas por diversão, aqui está o código:
fonte
Este é um método que escrevi. Leva um
integer milliseconds value
e retorna umhuman-readable String
:fonte
fonte
Eu sugeriria usar quaisquer funções / bibliotecas de data / hora que sua linguagem / estrutura de escolha fornecer. Verifique também as funções de formatação de string, pois geralmente fornecem maneiras fáceis de passar data / carimbo de data / hora e gerar um formato de string legível por humanos.
fonte
Suas escolhas são simples:
fonte
fonte
Isso deve imprimir: 0.0: 1: 9
fonte
Por que simplesmente não faça algo assim:
var ms = 86400;
var segundos = ms / 1000; //86.4
var minutos = segundos / 60; //1.4400000000000002
var horas = minutos / 60; //0.024000000000000004
var dias = horas / 24; //0.0010000000000000002
E lidar com a precisão de float, por exemplo, Number (minutes.toFixed (5)) //1.44
fonte
Em java
Dá algo assim:
fonte
Não posso comentar a primeira resposta à sua pergunta, mas há um pequeno erro. Você deve usar parseInt ou Math.floor para converter números de ponto flutuante em inteiros, i
Pessoalmente, eu uso CoffeeScript em meus projetos e meu código é assim:
fonte
Esta é uma solução. Posteriormente, você pode dividir por ":" e obter os valores da matriz
fonte
Aqui está minha solução usando TimeUnit.
ATUALIZAÇÃO: devo ressaltar que isso é escrito em groovy, mas Java é quase idêntico.
fonte
Uma maneira flexível de fazer isso:
(não feito para a data atual, mas bom o suficiente para durações)
NB: você também pode definir timeSteps como parâmetro se quiser controlar os intervalos de tempo.
como usar (copiar um teste):
fonte
Eu sugiro usar http://www.ocpsoft.org/prettytime/ library ..
é muito simples obter o intervalo de tempo em uma forma legível como
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));
vai imprimir como "momentos a partir de agora"
outro exemplo
PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);
então string atrás = "1 hora atrás"
fonte
Aqui está um método mais preciso em JAVA, eu implementei essa lógica simples, espero que isso ajude você:
fonte