restar manejo localdatetime horas fechas fecha ejemplo crear java java-8 period time-format

localdatetime - manejo de horas en java



¿Cómo formatear un período en Java 8/jsr310? (4)

Me gustaría formatear un Period usando un patrón como YY years, MM months, DD days . Las utilidades en Java 8 están diseñadas para formatear el tiempo, pero no el período ni la duración. Hay un PeriodFormatter en tiempo de Joda. ¿Tiene Java utilidades similares?


No es necesario usar String.format() para el formato de cadena simple. El uso de la concatenación de cadenas simples sin formato será optimizado por JVM:

Function<Period, String> format = p -> p.getYears() + " years, " + p.getMonths() + " months, " + p.getDays() + " days";


Una solución es simplemente utilizar String.format :

import java.time.Period; Period p = Period.of(2,5,1); String.format("%d years, %d months, %d days", p.getYears(), p.getMonths(), p.getDays());

Si realmente necesita usar las funciones de DateTimeFormatter , puede usar una fecha LocalDate temporal, pero este es un tipo de piratería que distorsiona la semántica de la fecha LocalDate .

import java.time.Period; import java.time.LocalDate; import java.time.format.DateTimeFormatter; Period p = Period.of(2,5,1); DateTimeFormatter fomatter = DateTimeFormatter.ofPattern("y ''years,'' M ''months,'' d ''days''"); LocalDate.of(p.getYears(), p.getMonths(), p.getDays()).format(fomatter);


la forma correcta parece ser un objeto LocalDate intermedio y luego un formato de llamada

date1.format(DateTimeFormatter.ofPattern("uuuu MM LLLL ee ccc")); OR (where appropriate) date1.format(DateTimeFormatter.ofPattern("uuuu MM LLLL ee ccc", Locale.CHINA))

esto imprime 1997 01 一月 07 周六 en chino, 1997 01 January 01 Sun 1997 01 一月 07 周六 en inglés y 1997 01 januari 07 zo en holandés.

visite DateTimeFormatter en "Patrones para el formateo y análisis" para obtener el formato deseado.


public static final String format(Period period){ if (period == Period.ZERO) { return "0 days"; } else { StringBuilder buf = new StringBuilder(); if (period.getYears() != 0) { buf.append(period.getYears()).append(" years"); if(period.getMonths()!= 0 || period.getDays() != 0) { buf.append(", "); } } if (period.getMonths() != 0) { buf.append(period.getMonths()).append(" months"); if(period.getDays()!= 0) { buf.append(", "); } } if (period.getDays() != 0) { buf.append(period.getDays()).append(" days"); } return buf.toString(); } }