Одна из вещей, которая может быть немного хитрой для разработчиков, плохо знакомых с Java, или даже для опытных разработчиков Java, плохо знакомых с форматированием с помощью Java Date , — это спецификация формата даты / времени с использованием SimpleDateFormat . Документация на уровне Javadoc на уровне класса для
SimpleDateFormat довольно тщательно описывает шаблоны, представляющие различные компоненты даты / времени. Однако, если не внимательно прочитать и понять эти различные шаблоны, может быть сложно вспомнить разницу между строчными буквами «d» для дня в месяце и прописными буквами «D» для дня в году или вспомнить, является ли это строчной буквой «m» или прописная буква «М» используется в течение месяцев против минут. В этой статье я рассмотрю простое приложение, написанное на JavaFX, которое позволяет разработчику быстро пробовать произвольные шаблоны, чтобы увидеть, как
SimpleDateFormat будет отображать текущую дату / время с учетом произвольного шаблона. Теоретически, разработчик мог бы использовать этот простой инструмент для быстрого определения эффекта от его / ее паттерна даты / времени, но это действительно больше оправдание для применения JavaFX. В приведенном ниже листинге кода содержится полное приложение на основе JavaFX 2.x.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
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 будет делать с каждым. Ряд из них используется вечером во вторник, 8 мая 2012 года, показаны далее. Эти примеры демонстрируют несколько ключевых аспектов использования SimpleDateFormat : - Прописная буква «M» используется в течение нескольких месяцев, а строчная буква «m» — в течение нескольких минут.
- Количество символов «M» представляет представление месяца (например, 5, 05 или «май» для мая).
- Прописная буква «D» обозначает номер дня года (с 1 января), а строчная буква «d» — номер дня месяца (в данном случае с 1 мая).
- Две цифры «y» или «Y» представляют год из двух цифр, но для 4-значного года можно использовать 3 или 4 цифры «Y» или «y».
Простой пример, выделенный в этом блоге, демонстрирует простоту JavaFX и предоставляет пример того, как JavaFX может предоставлять графические интерфейсы для повышения интуитивности приложений Java. В рамках этого демонстрируется обработка событий мыши в JavaFX и общая идиома JavaFX использования компоновщиков . Практическое использование этого приложения состоит в том, чтобы быстро и легко определить представление, предоставляемое
SimpleDateFormat для данного шаблона. Ссылка: демонстратор SimpleDateFormat на основе JavaFX от нашего партнера по JCG Дастина Маркса в блоге Inspired by Actual Events .








