Tengo la fecha en este formato yyyy-MM-dd'T'HH:mm:ss'Z'
, pero mientras estoy usando este análisis OffsetDateTime.parse(date);
se devuelve la cadena por eliminaciónseconds
Lógica: Obtener el día de la fecha, si es Saturday
o Sunday
cambio de día para el lunes y devuelve la cadena de fecha
String date = "2018-12-30T06:00:00Z";
System.out.println(date);
try {
OffsetDateTime dateTime = OffsetDateTime.parse(date);
System.out.println(dateTime); //2018-12-30T06:00Z
DayOfWeek day = dateTime.getDayOfWeek();
// check if price change date is Sunday or Saturday and change it to Monday
if (day.equals(DayOfWeek.SATURDAY) || day.equals(DayOfWeek.SUNDAY)) {
String finalDateTime = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).toString();
System.out.println(finalDateTime); //2018-12-31T06:00Z
}else {
System.out.println(date);
}
}catch(Exception ex) {
System.out.println(ex);
System.out.println(date);
}
Tengo que devolver misma cadena como formato de entrada yyyy-MM-dd'T'HH:mm:ss'Z'
Según OffsetDateTime.toString()
javadoc método se utiliza el formato más breve posible para el valor mientras que las partes omitidas están implícitas a ser cero. El formato más breve posible para 2018-12-30T06:00:00Z
es uuuu-MM-dd'T'HH:mmXXXXX
así que los segundos y los nanos se omiten:
La salida será uno de los siguientes ISO-8601 formatos:
- uuuu-MM-dd'T'HH: mmXXXXX
- uuuu-MM-dd'T'HH: mm: ssXXXXX
- uuuu-MM-dd'T'HH: mm: ss.SSSXXXXX
- uuuu-MM-dd'T'HH: mm: ss.SSSSSSXXXXX
- uuuu-MM-dd'T'HH: mm: ss.SSSSSSSSSXXXXX
El formato utilizado será el más corto que da salida el valor total de las veces en que las partes omitidas están implícitas a ser cero.
Si necesita un formato preciso utilizar una DateTimeFormatter
instancia con el patrón específico para dar salida a la fecha:
String date = "2018-12-30T06:00:00Z";
OffsetDateTime dt = OffsetDateTime.parse(date);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
System.out.println(fmt.format(dt));