特定格式的 JavaFX DatePicker getValue
Posted
技术标签:
【中文标题】特定格式的 JavaFX DatePicker getValue【英文标题】:JavaFX DatePicker getValue in a specific format 【发布时间】:2015-01-06 01:24:56 【问题描述】:我目前正在使用 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);
【问题讨论】:
Format date in java的可能重复 这个问题似乎只涉及java.util.Date
s,而不是java.time.LocalDate
s
认真阅读有帮助.... :-D ... 所以使用: String date(LocalDate date) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy");返回日期。格式(格式化程序);
【参考方案1】:
DataPicker 在数据选择器中引用转换器
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;
);
【讨论】:
谢谢,这对@Reegan 很有帮助【参考方案2】:使用您指定的模式创建一个DateTimeFormatter
(您为该模式提供的语法完全正确;文档详细介绍了该模式的语法)。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy");
// ...
LocalDate date = datePicker.getValue();
if (date != null)
display.setText(formatter.format(date));
else
display.setText("");
【讨论】:
【参考方案3】:使用 setConverter 不会改变你用来获取 DatePicker 值的 .getValue() 方法的格式 setConverter 只会改变 DatePicker 上显示的日期。
例如获取 DatePicker 值:-
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy",Locale.US);
String formattedValue = (myDatePicker.getValue()).format(formatter);
并设置 DatePicker 的值
String dateValue = "01 12, 2015";
myDatePicker.setValue(LocalDate.parse(dateValue,formatter));
【讨论】:
【参考方案4】:docs 提供了一个很好的例子。只要确保你的控制器实现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;
);
【讨论】:
【参考方案5】:使用 SimleDateFormat:
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);
【讨论】:
您不能将其与java.time.LocalDate
一起使用。
对不起...戴眼镜可能会有所帮助:-D
仅供参考,非常麻烦的旧日期时间类,如 java.util.Date
、java.util.Calendar
和 java.text.SimpleDateFormat
现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。以上是关于特定格式的 JavaFX DatePicker getValue的主要内容,如果未能解决你的问题,请参考以下文章
DatePicker 的值在 Javafx 中 Tableview 的行中不断重置