对于使用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为给定模式提供的表示形式。