Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定格式的JavaFX DatePicker getValue_Java_Date_Datepicker_Javafx - Fatal编程技术网

特定格式的JavaFX DatePicker getValue

特定格式的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

我目前正在使用场景生成器制作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);
}

}
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;
          }
        });

  }

}