特定格式的JavaFX DatePicker getValue
我目前正在使用场景生成器制作javafx场景。我想以特定的格式从日期选择器中获取值。只需使用datePicker.getValue()即可返回yyyy-mm-dd格式的日期值。我要MMM dd,yyyy格式的。有人能帮我吗 当前完整的datePickerController代码如下特定格式的JavaFX DatePicker getValue,java,date,datepicker,javafx,Java,Date,Datepicker,Javafx,我目前正在使用场景生成器制作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.DateTimeForma
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);
}
}
package date.picker;
导入java.net.URL;
导入java.time.LocalDate;
导入java.time.format.DateTimeFormatter;
导入java.util.ResourceBundle;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.Alert;
导入javafx.scene.control.Alert.AlertType;
导入javafx.scene.control.Button;
导入javafx.scene.control.DatePicker;
导入javafx.scene.control.TextField;
导入javafx.util.StringConverter;
/**
*FXML控制器类
*
*@author Dushyant Patel
*/
公共类DatePickerController实现可初始化{
@FXML
专用文本字段显示;
@FXML
私人日期选择器日期选择器;
@FXML
私有按钮getDateBtn;
@FXML
私有按钮setDateBtn;
@FXML
私有void getDateAction(ActionEvent事件){
LocalDate=datePicker.getValue();
如果(日期!=null){
display.setText(date.toString());
}否则{
display.setText(“”);
}
}
@FXML
私有void datePickerAction(ActionEvent事件){
LocalDate=datePicker.getValue();
如果(日期!=null){
display.setText(date.toString());
}否则{
display.setText(“”);
}
}
@FXML
私有void setDateAction(ActionEvent事件){
如果(!display.getText().trim()等于(“”){
if(display.getText().length()!=10){
Alert Alert=新警报(AlertType.ERROR);
alert.setTitle(“错误对话框”);
alert.setHeaderText(“日期错误”);
alert.setContentText(“请以正确的日期格式键入日期!”);
alert.showAndWait();
}否则{
LocalDate=LocalDate.parse(display.getText());
datePicker.setValue(日期);
}
}否则{
datePicker.setValue(null);
}
}
/**
*初始化控制器类。
*/
@凌驾
公共void初始化(URL、ResourceBundle rb){
字符串模式=“MMM-dd,yyyy”;
StringConverter转换器=新的StringConverter(){
DateTimeFormatter dateFormatter=模式(模式)的DateTimeFormatter;
@凌驾
公共字符串toString(LocalDate){
如果(日期!=null){
返回日期格式化程序。格式(日期);
}否则{
返回“”;
}
}
@凌驾
public LocalDate fromString(字符串){
if(string!=null&&!string.isEmpty()){
返回LocalDate.parse(字符串,dateFormatter);
}否则{
返回null;
}
}
};
datePicker.setConverter(转换器);
}
}
使用SimleDate格式:
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy");
setText(format.format(date));
哎呀。。。LocalDate不是日期
String date(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy");
return date.format(formatter);
}
使用指定的模式创建一个(您为该模式提供的语法完全正确;文档详细介绍了模式语法)
请参阅数据采集器中的转换器
datePicker.setConverter(new StringConverter<LocalDate>() {
String pattern = "yyyy-MM-dd";
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);
{
datePicker.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;
}
}
});
datePicker.setConverter(新的StringConverter(){
字符串模式=“yyyy-MM-dd”;
DateTimeFormatter dateFormatter=模式(模式)的DateTimeFormatter;
{
datePicker.setPrompText(pattern.toLowerCase());
}
@将公共字符串重写为字符串(LocalDate){
如果(日期!=null){
返回日期格式化程序。格式(日期);
}否则{
返回“”;
}
}
@重写公共LocalDate fromString(字符串){
if(string!=null&&!string.isEmpty()){
返回LocalDate.parse(字符串,dateFormatter);
}否则{
返回null;
}
}
});
使用setConverter不会更改用于获取日期选择器值的.getValue()方法的格式setConverter只会更改日期选择器上显示的日期
例如,要获取日期选择器值:-
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy",Locale.US);
String formattedValue = (myDatePicker.getValue()).format(formatter);
和设置日期选择器的值
String dateValue = "01 12, 2015";
myDatePicker.setValue(LocalDate.parse(dateValue,formatter));
本文提供了一个很好的例子。只需确保您的控制器实现了Initializable
,然后按如下方式对其进行初始化:
public class MyController implements Initializable {
@FXML
private DatePicker myDatePicker;
@Override
public void initialize(URL location, ResourceBundle resources) {
myDatePicker.setConverter(
new StringConverter<>() {
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public String toString(LocalDate date) {
return (date != null) ? dateFormatter.format(date) : "";
}
@Override
public LocalDate fromString(String string) {
return (string != null && !string.isEmpty())
? LocalDate.parse(string, dateFormatter)
: null;
}
});
}
}
公共类MyController实现可初始化{
@FXML
私人日期选择器myDatePicker;
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
myDatePicker.setConverter(
新的StringConverter(){
最终日期TimeFormatter dateFormatter=模式的DateTimeFormatter.of(“yyyy-MM-dd”);
@凌驾
公共字符串toString(LocalDate){
返回(日期!=null)?日期格式化程序。格式(日期):“”;
}
@凌驾
public LocalDate fromString(字符串){
return(string!=null&&!string.isEmpty())
?LocalDate.parse(字符串、日期格式化程序)
:null;
}
});
}
}
该问题的可能重复似乎只涉及java.util.Date
s,而不是java.time.LocalDate
s阅读有助于-D所以请使用:String date(LocalDate date date){DateTimeFormatter formatter=DateTimeFormatter.ofPattern(“MMM dd,yyyyy”);return date.format(formatter);}您不能将其用于java.time.LocalDate
。抱歉。。。使用眼镜可能会有所帮助:-DFYI,像和java.text.simpleDataFormat
这样非常麻烦的旧日期时间类现在被内置在Java8和更高版本中的类所取代。瞧,谢谢,这帮了大忙@Reegan
public class MyController implements Initializable {
@FXML
private DatePicker myDatePicker;
@Override
public void initialize(URL location, ResourceBundle resources) {
myDatePicker.setConverter(
new StringConverter<>() {
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public String toString(LocalDate date) {
return (date != null) ? dateFormatter.format(date) : "";
}
@Override
public LocalDate fromString(String string) {
return (string != null && !string.isEmpty())
? LocalDate.parse(string, dateFormatter)
: null;
}
});
}
}