Одна из вещей, которая может быть немного хитрой для разработчиков, плохо знакомых с 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 .