Necesito convertir una cantidad arbitraria de milisegundos en Días, Horas, Minutos Segundo.
Por ejemplo: 10 días, 5 horas, 13 minutos, 1 segundo.
date
time
string-formatting
datetime-format
FlySwat
fuente
fuente
Respuestas:
Bueno, dado que nadie más ha intensificado, escribiré el código fácil para hacer esto:
Me alegro de que se detuviera en días y no preguntara durante meses. :)
Tenga en cuenta que en lo anterior, se supone que
/
representa truncar la división de enteros. Si usa este código en un idioma donde/
representa la división de punto flotante, deberá truncar manualmente los resultados de la división según sea necesario.fuente
Sea A la cantidad de milisegundos. Entonces tiene:
y así sucesivamente (
%
es el operador de módulo).Espero que esto ayude.
fuente
/
realiza una división de punto flotante, debe truncar el valor. Se asume en otras respuestas que/
está realizando una división de enteros.Ambas soluciones a continuación usan javascript (¡no tenía idea de que la solución era independiente del idioma!). Ambas soluciones deberán ampliarse si se capturan duraciones
> 1 month
.Solución 1: use el objeto Date
Da:
Las bibliotecas son útiles, pero ¿por qué usar una biblioteca cuando puedes reinventar la rueda? :)
Solución 2: escriba su propio analizador
Crea un objeto de "duración", con los campos que necesite. Dar formato a una marca de tiempo se vuelve simple ...
Da:
fuente
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 tiene un DurationFormatUtils que tiene métodos muy útiles como formatDurationWords .
fuente
Debe usar las funciones de fecha y hora de cualquier idioma que esté usando, pero, solo por diversión, aquí está el código:
fuente
Este es un método que escribí. Toma un
integer milliseconds value
y devuelve unhuman-readable String
:fuente
fuente
Sugeriría usar cualquier función / biblioteca de fecha / hora que proporcione su lenguaje / marco de elección. Consulte también las funciones de formato de cadena, ya que a menudo proporcionan formas fáciles de pasar las marcas de fecha / hora y generar un formato de cadena legible por humanos.
fuente
Tus elecciones son simples:
fuente
fuente
Esto debería imprimir: 0.0: 1: 9
fuente
¿Por qué no haces algo como esto?
var ms = 86400;
var segundos = ms / 1000; //86.4
var minutos = segundos / 60; //1.4400000000000002
var horas = minutos / 60; //0.024000000000000004
var días = horas / 24; //0.0010000000000000002
Y lidiar con la precisión flotante, por ejemplo, Number (minutes.toFixed (5)) //1.44
fuente
En java
Da algo como esto:
fuente
No puedo comentar la primera respuesta a su pregunta, pero hay un pequeño error. Debe usar parseInt o Math.floor para convertir números de punto flotante a enteros, i
Personalmente, uso CoffeeScript en mis proyectos y mi código se ve así:
fuente
Esta es una solucion. Más tarde, puede dividir por ":" y tomar los valores de la matriz
fuente
Aquí está mi solución usando TimeUnit.
ACTUALIZACIÓN: Debo señalar que esto está escrito en groovy, pero Java es casi idéntico.
fuente
Una forma flexible de hacerlo:
(no está hecho para la fecha actual, pero lo suficientemente bueno para duraciones)
NB: también puede establecer timeSteps como parámetro si desea controlar los rangos de tiempo.
cómo usar (copiar una prueba):
fuente
Sugiero usar http://www.ocpsoft.org/prettytime/ library ..
es muy simple obtener el intervalo de tiempo en forma legible por humanos como
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));
se imprimirá como "momentos a partir de ahora"
otro ejemplo
PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);
luego cadena hace = "hace 1 hora"
fuente
Aquí hay un método más preciso en JAVA, he implementado esta lógica simple, espero que esto te ayude:
fuente