对于使用Java Date进行格式化的新手甚至对于使用Java Date进行格式化的有经验的Java开发人员而言,可能有些棘手的事情是使用SimpleDateFormat规范日期/时间格式。 SimpleDateFormat的基于类级别的Javadoc的文档非常详尽,涵盖了表示日期/时间的各个组成部分的模式。
但是,除非人们仔细阅读并理解了这些不同的模式,否则要记住月份的小写字母“ d”和一年中的大写字母“ D”之间的区别或者记住是否是小写字母“ m”或“大写字母“ M”使用了几个月而不是几分钟。 在本文中,我看一个用JavaFX编写的简单应用程序,它使开发人员可以快速尝试任意模式,以查看SimpleDateFormat如何在给定任意模式的情况下呈现当前日期/时间。 从理论上讲,开发人员可以使用这个简单的工具快速确定其日期/时间模式的效果,但这实际上是应用JavaFX的一个借口。
下面的代码清单包含完整的基于JavaFX 2.x的应用程序。
package dustin.examples;
import java.text.SimpleDateFormat;
import java.util.Date;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFieldBuilder;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
* JavaFX application allowing for testing and demonstration of various String
* formats for date/time.
*
* @author Dustin
*/
public class DateTimeStringFormatDemonstrator extends Application
{
/**
* Generate the application's main pane.
*
* @return Main pane for the application.
*/
private Pane generateMainPane()
{
final VBox vbox = new VBox();
final TextField dateTimeFormatField =
TextFieldBuilder.create().prefWidth(350).alignment(Pos.CENTER)
.promptText("Enter DateFormat")
.build();
vbox.getChildren().add(dateTimeFormatField);
final TextField formattedDateField =
TextFieldBuilder.create().prefWidth(350).alignment(Pos.BASELINE_CENTER)
.promptText("Date Output Goes Here").build();
formattedDateField.setEditable(false);
final Button applyButton = new Button("Apply Format");
applyButton.setPrefWidth(350);
applyButton.setOnMousePressed(
new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent)
{
try
{
final SimpleDateFormat sdf =
new SimpleDateFormat(dateTimeFormatField.getText());
formattedDateField.setText(sdf.format(new Date()));
formattedDateField.setAlignment(Pos.CENTER);
}
catch (Exception ex)
{
formattedDateField.setText("ERROR");
formattedDateField.setAlignment(Pos.CENTER);
}
formattedDateField.setAlignment(Pos.BASELINE_CENTER);
}
});
vbox.getChildren().add(applyButton);
vbox.getChildren().add(formattedDateField);
return vbox;
}
/**
* The method overridden from Application for starting the application.
*
* @param stage Primary stage.
* @throws Exception Exceptions throwing during execution of JavaFX application.
*/
@Override
public void start(final Stage stage) throws Exception
{
stage.setTitle("JavaFX Date/Time String Format Presenter");
final Group group = new Group();
group.getChildren().add(generateMainPane());
final Scene scene = new Scene(group, 350, 65, Color.DARKKHAKI);
stage.setScene(scene);
stage.show();
}
/**
* Main function for running date/time format JavaFX application.
*
* @param arguments Command-line arguments; none expected.
*/
public static void main(final String[] arguments)
{
Application.launch(arguments);
}
}
上面显示的基于JavaFX 2的简单应用程序使您可以轻松地尝试不同的日期/时间格式模式,以查看SimpleDateFormat将如何处理每种模式。 接下来显示在2012年5月8日星期二晚上使用的一系列此类。 这些示例演示了使用SimpleDateFormat几个关键方面:
- 大写字母“ M”用于几个月,小写字母“ m”用于分钟。
- “ M”字符的数量表示月份的表示形式(例如:5月的5、05或“ 5月”)。
- 大写字母“ D”表示年份中的日期(自1月1日开始),小写字母“ d”表示月份中的日期(自5月1日开始)。
- 两个'y'或'Y'数字代表2位数字的年份,但是3或4个'Y'或'y'数字可用于4位数字的年份。
本博客文章中突出显示的简单示例演示了JavaFX的简单性,并提供了JavaFX如何提供图形界面以使Java应用程序更直观的示例。 作为其一部分,将演示JavaFX中的鼠标事件处理以及使用构建器的常见JavaFX习惯用法 。 此应用程序的实际用途是快速轻松地确定由SimpleDateFormat为给定模式提供的表示形式。