2011-06-11 37 views
7

He oído que es posible lograr esto utilizando el operador de módulo % presente en la mayoría de los lenguajes de programación. La verdadera pregunta es, ¿cómo? No estoy familiarizado con el funcionamiento del módulo, así que tuve dificultades para usarlo en el pasado. Dado el tiempo presente aquí en segundos desde 1970, 1307758473.484, ¿cómo puedo calcular cuántos años, es decir, días, es decir, horas y minutos que está usando el módulo?Dividir un número en segundos en días, horas, minutos y segundos?

Básicamente estoy buscando formatearlo así: "5 años, 10 días, 12 horas, 7 minutos y 18,56 segundos". ¿Cómo haría esto? Estoy realmente interesado en aprender la lógica detrás de esto y no interesado en una solución sencilla.

Respuesta

19

Cuando realiza división de enteros, obtiene cociente y resto.Por ejemplo,

5 divided by 3 is quotient 1 with remainder 2. 

En los lenguajes de programación, esto se suele expresar como:

5/3 # => 1 
5 % 3 # => 2 

La conversión que desea es sólo un repeatation de este. Es más fácil comenzar desde la unidad inferior e ir más arriba en.

En primer lugar, usted tiene

  • 1307758473.484 seconds

desde hace 60 segundos es de 1 minuto, y

1307758473.484/60 = 21795974 (intended to be integer division) 
1307758473.484 % 60 = 33.484, 

es el mismo que

  • 21795974 minutes 33.484 seconds

Desde 60 minutos es de 1 hora, y

21795974/60 = 363266 
21795974 % 60 = 14 

es además el mismo que

  • 363266 hours 14 minutes 33.484 seconds

Ahora, hay un poco de dificultad . La mayoría de los días son 24 horas. Cuando hay un segundo intercalar, no lo es. Si ignora segundos intercalares y asume 1 día es 24 horas, luego, al hacer el cálculo,

363266/24 = 15136 
363266 % 24 = 2 

es aún más el mismo que

  • 15136 days 2 hours 14 minutes 33.484 seconds.

Similarmente, la mayoría de los años son 365 días. Cuando hay un día bisiesto (año), no lo es. Si pasa por alto salto días y se supone que 1 año es de 365 días, a continuación, al hacer el cálculo,

15136/365 = 41 
15136 % 365 = 171 

es aún más el mismo que

  • 41 years 171 days 2 hours 14 minutes 33.483 seconds
4

El módulo devuelve el resto al realizar la división de enteros.

Creo que es más fácil entender cómo usar Mod trabajando primero en un problema.

Comencemos simple con horas, minutos y segundos - 1 hora, 10 minutos y 30 segundos para ser precisos.

Primero, tienes 30 segundos. Esto es fácil, solo son 30. Sin dudas. Ahora agregue minutos: para determinar los minutos en segundos, multiplíquelos por 60. Por lo tanto, 10 minutos y 30 segundos = 630 segundos.

Ahora vemos cómo funciona la modificación - porque si divide 630 por 60, obtiene 10.5 pero si ignora la fracción (división entera entera) obtiene 10. El resto son los segundos.

Así que si MOD 630 por 60 se obtiene 30 - el resto que queda más al dividir 630 por 30.

Así que para determinar los minutos y segundos, se divide por 60 para los minutos, y MOD por 60 para los segundos .

Ahora agregue una hora. Una hora = 60 minutos y 60 minutos es 60 * 60 segundos, por lo que 1 hora = 3600 segundos. 3600 + 600 + 30 = 4230 segundos.

4230/3600 (1 hora) = 1 - por lo que Tienen una hora

4,230% (mod) 3600 = 630 - agarrar esta y ahora nos proceso para minutos.

Así que si la carne esta fuera más allá y agrega un día - 1 día = 24 horas = 24 * 3600 = 86400 86400 + 3600 + 600 + 30 = 90630

90630/86400 = 1 -> 1 día

90.630% 86400 = 4230 -> segundo sobrantes

4230/3600 = 1 -> 1 hora

y repiten la lógica anterior.

Espero que ayude a aclararlo: usted sigue repitiendo esa iteración y puede hacer semanas y años, pero los meses son especiales ya que son irregulares, y también lo son los años bisiestos.

+0

Buena respuesta. @TK, compare esto con hacer cambios y convertir un número de la base x a la base y. Hay un patrón común aquí. –

Cuestiones relacionadas