我目前正在使用Scene Builder制作JavaFX场景。我想以特定格式从日期选择器中获取值。仅使用datePicker.getValue()会以yyyy-mm-dd的形式返回日期值。我想要的是MMM dd,yyyy格式。有人可以帮助我吗?
当前完整的datePickerController代码如下:
package date.picker;
import java.net.URL;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.util.StringConverter;
/**
* FXML Controller class
*
* @author Dushyant Patel
*/
public class DatePickerController implements Initializable {
@FXML
private TextField display;
@FXML
private DatePicker datePicker;
@FXML
private Button getDateBtn;
@FXML
private Button setDateBtn;
@FXML
private void getDateAction(ActionEvent event) {
LocalDate date = datePicker.getValue();
if (date != null) {
display.setText(date.toString());
} else {
display.setText("");
}
}
@FXML
private void datePickerAction(ActionEvent event) {
LocalDate date = datePicker.getValue();
if (date != null) {
display.setText(date.toString());
} else {
display.setText("");
}
}
@FXML
private void setDateAction(ActionEvent event) {
if (!display.getText().trim().equals("")) {
if (display.getText().length() != 10) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error Dialog");
alert.setHeaderText("Date Error");
alert.setContentText("Please type date in the correct date format!");
alert.showAndWait();
} else {
LocalDate date = LocalDate.parse(display.getText());
datePicker.setValue(date);
}
} else {
datePicker.setValue(null);
}
}
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
String pattern = "MMM dd, yyyy";
StringConverter converter = new StringConverter<LocalDate>() {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);
@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;
}
}
};
datePicker.setConverter(converter);
}
}
java.util.Date
,而不是java.time.LocalDate
。 - James_D