对于使用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>(){@Overridepublic 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.*/@Overridepublic 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
为给定模式提供的表示形式。 参考:来自JCG合作伙伴 Dustin Marx 的基于JavaFX的SimpleDateFormat演示器,来自Inspired by Actual Events博客。
翻译自: https://www.javacodegeeks.com/2012/05/javafx-based-simpledateformat.html