Quiero crear una función que tome una cadena que represente una fecha en el formato "MM / dd / aaaa HH: mm AM o PM" y quiero incrementar los días y la hora X la cantidad de veces antes de que se devuelva en el formato aaaa -MM-dd HH: mm AM o PM ". En este momento, lo único que sé es convertirlo a la fecha y hora europeas, trabajar con él usando LocalDateTime o Calendar y luego convertirlo nuevamente, pero se siente ineficiente al volver y ¿Hay algún objeto de fecha y hora que pueda funcionar con la hora de EE. UU. y hacer cosas como incrementos?

0
user13306076 5 may. 2020 a las 16:36

4 respuestas

Intente DateTimeFormatter.ofPattern(...) para analizar su cadena a un LocalDateTime. También hay opciones para analizar AM / PM

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
a       am-pm-of-day                text              PM

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO

1
Marc Ströbel 5 may. 2020 a las 13:42

DateTimeFormatter + LocalDateTime

import java.time.temporal.ChronoUnit;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

DateTimeFormatter formater = DateTimeFormatter.ofPattern("MM/dd/yyyy h:mm:ss a", Locale.ENGLISH);
LocalDateTime dateTime = LocalDateTime.parse("05/06/2020 3:45:00 PM", formater);
dateTime.plus(5, ChronoUnit.DAYS)
1
kofemann 5 may. 2020 a las 14:37

Lo aprecio pero ninguna de las soluciones funcionó. Pero parece que tengo que convertir. En ese caso solo necesito saber la siguiente conversión: "aaaa / MM / dd / HH: mm" a "aaaa / MM / dd / HH: mm a"

Ejemplos: "2020/03/25/06: 00" debería ser "2020/03/06/00 AM" "2020/03/25/18: 00" debería ser "2020/03/06/00 PM"

Es realmente solo la AM y la PM eso está jugando conmigo.

0
user13306076 5 may. 2020 a las 14:38

Como está tomando la fecha como una Cadena en primer lugar, deberá hacer una conversión a LocalDateTime para manipularla. Dicho esto, podrías hacer algo como esto:

    DateTimeFormatter formatter = new DateTimeFormatter("MM/dd/yyyy hh:mm a");
    LocalDateTime date = LocalDateTime.parse([yourString], formatter);

Desde aquí, haría su manipulación de fecha / hora utilizando los métodos más y menos de esta documentación: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html Luego, una vez que haya hecho eso, cree un SimpleDateFormat así:

SimpleDateFormat sdf = new SimpleDateFormatter.ofPattern(yyyy-MM-dd hh:mm a)

Y luego imprime tu cadena así:

sdf.format(date).toString(); 
0
Ole V.V. 5 may. 2020 a las 17:18