java date javafx datepicker fxml

java - Localdate.format, el formato no se aplica



javafx datepicker (2)

Tengo un DatePicker en mi FXML y necesito la fecha para insertarlo en mi base de datos SQL. Quiero formatear mi fecha pero no funciona.

LocalDate localDate = purchased_at.getValue(); localDate.format(DateTimeFormatter.ofPattern("dd.mm.yyyy"));

Este es el error que recibo.

Caused by: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour

Todavía soy una especie de principiante. Tuve Java durante los últimos 3 o 4 meses ahora. Estoy haciendo mi mejor esfuerzo para mejorar.


No formatee su fecha de inserción en su base de datos SQL. Suponiendo que la columna de su base de datos tenga una date tipo de datos y que esté utilizando al menos Java 8 y al menos JDBC 4.2, simplemente pase la LocalDate a su Estado de PreparedStatement tal como está:

PreparedStatement insertStmt = myConnection.prepareStatement( "insert into my_table(purchase_date) values (?)"); insertStmt.setObject(1, purchaseDate);

Tu conductor JDBC se encargará del resto. Si usa JPA, su implementación de JPA también se hará cargo de ello.

Si su columna tiene tipo char (por ejemplo, varchar(10) ) y no puede cambiarla, no invente su propio formato. Almacenar la fecha en formato ISO 8601. LocalDate.toString() produce este formato.

String formattedDate = purchaseDate.toString(); System.out.println(formattedDate);

En mi caso la salida fue:

2017-11-29

Además, para la presentación a su usuario, tampoco debe inventar su propio formato. Más bien confiar en los formatos incorporados en Java. Por ejemplo:

Locale turkish = Locale.forLanguageTag("tr"); DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) .withLocale(turkish); String formattedDate = purchaseDate.format(dateFormatter); System.out.println(formattedDate);

Salida:

29.11.2017

¿Qué salió mal en tu código?

Hay dos cosas mal:

  1. Usaste mm minúsculas. Esto significa un minuto de hora, y dado que LocalDate no tiene una hora del día, arrojó la excepción que vio. El mensaje que recibiste es bastante preciso:

    Campo no compatible: MinuteOfHour

    En su lugar, puede usar MM mayúsculas para el mes de dos dígitos.

  2. Debe seleccionar el formato en el String devuelto por el método de format . El LocalDate es inmutable y, por lo tanto, no se ve afectado por la llamada al método. Tampoco puede tener un formato en ella. Es solo una fecha en el calendario.

Enlace: Artículo de Wikipedia: ISO 8601


Tuve que usar un convertidor de cadenas para mi Selector de fechas.

public String changeformat(DatePicker date) { date.setConverter(new StringConverter<LocalDate>() { String pattern = "MM.yyyy"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); { date.setPromptText(pattern.toLowerCase()); } @Override public String toString(LocalDate date) { if (date != null) { return dateFormatter.format(date); } else { return ""; } } @Override public LocalDate fromString(String string) { if (string != null && !string.isEmpty()) { return LocalDate.parse(string, dateFormatter); } else { return null; } } }); return null; }

Funcionó perfectamente bien. Tuve que usar un parámetro ya que actualmente estoy usando 5 Selladores de fechas.