2011-06-05 159 views
10

Im nuevo en Java y quiero convertir meses a años. Por ejemplo, si tuviera 18 meses y dividiera eso por 12, tendría 1,5 años, pero lo quiero como 1 año y 6 meses.Cómo convertir meses a años-y-meses en Java

Gracias por su ayuda.

+0

Esta es una pregunta de matemáticas, no tiene nada que ver con Java. –

+0

@ ChristofferHammarström No es en absoluto irrelevante para Java. Se han creado dos marcos sofisticados para manejar este tipo de trabajo, primero Joda-Time y ahora java.time integrado en Java 8 y posterior. Si bien este caso particular podría ser manejado por las matemáticas, es probable que haya mucho más trabajo de fecha y hora involucrado. El uso de las clases java.time hace que ese trabajo sea más auto-documentado, con intenciones más claras que con las matemáticas enteras simples. Además de los beneficios del soporte integrado para formatos ISO 8601 que facilitan la visualización de dichos valores de datos en el depurador y los registros (y el intercambio de datos también). –

+0

@BasilBourque En el caso específico de convertir meses a años, siempre hay 12 meses en un año, una división simple y un módulo. –

Respuesta

17

Utilice el módulo %.

int months = 18; 
int years = months/12; // 1 
int remainingMonths = months % 12; // 6 
+1

@Giku, en ese caso es posible que desee considerar la mejora de su velocidad de escritura. –

+0

@jjj: Eso no tiene sentido ya que la asignación 'doble' ->' int' ya está en el piso. Además, tu línea no compila en absoluto. Tal vez cometió un error en su código real no visible en la información proporcionada hasta el momento. – BalusC

1

java.time

java.time El marco está construido en Java 8 y versiones posteriores. Estas clases suplantan a las antiguas clases problemáticas de fecha y hora como java.util.Date, .Calendar, & java.text.SimpleDateFormat. El equipo Joda-Time también aconseja la migración a java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones.

Gran parte de la funcionalidad java.time está de vuelta-portado a Java 6 & 7 en ThreeTen-Backport y más adaptado a Android en [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP).

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más.

Period

La clase Period pistas de un lapso de tiempo no relacionado con la línea de tiempo en términos de años, meses y días. Asegúrese de llamar al normalized como un hábito para obligarlo a volver a calcular dieciocho meses en términos de un año y seis meses.

Period period = Period.ofMonths(18).normalized(); 

Extraiga el número de años y de meses.

int years = period.getYears(); 
int months = period.getMonths(); 

Puede llamar toString para representar este valor en el formato estándar para ISO 8601“durations”: PnYnMnDTnHnMnS. En este formato, el P marca el comienzo, mientras que el T separa la parte años-meses-días de la porción horas-minutos-segundos (irrelevante en el caso de esta pregunta).

String output = period.toString(); 

P1Y6M