回答編集履歴
1
見直しキャンペーン中
answer
CHANGED
@@ -1,72 +1,74 @@
|
|
1
|
-
いろんな方法が考えられますが、`LocalDateTime`を使った方法です。
|
2
|
-
|
3
|
-
`LocalDateTime.now()`には、`Clock`を指定するオーバーロードがあります。
|
4
|
-
[LocalDateTime - now (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html#now-java.time.Clock-)
|
5
|
-
|
6
|
-
単体テスト等で使うことが多いと思いますが、今回の目的にも便利に使えます。
|
7
|
-
今の日時と入力された日時の差をオフセットした`Clock`を作ります。
|
8
|
-
[Clock - offset (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Clock.html#offset-java.time.Clock-java.time.Duration-)
|
9
|
-
[Duration - between (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Duration.html#between-java.time.temporal.Temporal-java.time.temporal.Temporal-)
|
10
|
-
|
11
|
-
後は普通の時計と同じように作るだけです(面倒なので超雑です^^;
|
12
|
-
```Java
|
13
|
-
import java.time.Clock;
|
14
|
-
import java.time.Duration;
|
15
|
-
import java.time.LocalDateTime;
|
16
|
-
import java.time.format.DateTimeFormatter;
|
17
|
-
import javax.swing.JButton;
|
18
|
-
import javax.swing.JFrame;
|
19
|
-
import javax.swing.JLabel;
|
20
|
-
import javax.swing.JPanel;
|
21
|
-
import javax.swing.JTextField;
|
22
|
-
import javax.swing.Timer;
|
23
|
-
|
24
|
-
public class Sample extends JFrame {
|
25
|
-
static void main(String[] args) {
|
26
|
-
new Sample().setVisible(true);
|
27
|
-
}
|
28
|
-
|
29
|
-
private final DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern("yyyy/M/d/H:m:s");
|
30
|
-
private final DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd/HH:mm:ss");
|
31
|
-
|
32
|
-
// 使用するクロック(最初はデフォルト=普通の時計)
|
33
|
-
private Clock clock = Clock.systemDefaultZone();
|
34
|
-
|
35
|
-
Sample() {
|
36
|
-
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
37
|
-
setLocationRelativeTo(null);
|
38
|
-
setSize(300, 200);
|
39
|
-
|
40
|
-
var panel = new JPanel();
|
41
|
-
add(panel);
|
42
|
-
|
43
|
-
var label = new JLabel(outFormatter.format(LocalDateTime.now()));
|
44
|
-
panel.add(label);
|
45
|
-
|
46
|
-
var textField = new JTextField(20);
|
47
|
-
textField.setText("2015/11/3/15:30:00");
|
48
|
-
panel.add(textField);
|
49
|
-
|
50
|
-
var button = new JButton("⏲ 指定日時にタイムトラベル ⏲");
|
51
|
-
button.addActionListener(e -> {
|
52
|
-
// 日時フォーマットを指定してLocalDateTimeに変換(フォーマットがあっていなければ当然エラー)
|
53
|
-
var localDateTime = LocalDateTime.parse(textField.getText(), inFormatter);
|
54
|
-
// 今の日時との差
|
55
|
-
var duration = Duration.between(LocalDateTime.now(), localDateTime);
|
56
|
-
// クロックをずらす
|
57
|
-
clock = Clock.offset(Clock.systemDefaultZone(), duration);
|
58
|
-
});
|
59
|
-
panel.add(button);
|
60
|
-
|
61
|
-
new Timer(1000, e -> {
|
62
|
-
// クロックを指定して今の日時を取得(クロックがずれていれば、ずれた日時)
|
63
|
-
var localDateTime = LocalDateTime.now(clock);
|
64
|
-
// 日時フォーマットを指定してStringに変換
|
65
|
-
label.setText(localDateTime.format(outFormatter));
|
66
|
-
}).start();
|
67
|
-
}
|
68
|
-
}
|
69
|
-
```
|
70
|
-
|
71
|
-
日時フォーマット(0をつけるかどうか)がはっきりしなかったので入出力でわけましたが、お好きにどうぞ。
|
72
|
-
[DateTimeFormatter (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html)
|
1
|
+
いろんな方法が考えられますが、`LocalDateTime`を使った方法です。
|
2
|
+
|
3
|
+
`LocalDateTime.now()`には、`Clock`を指定するオーバーロードがあります。
|
4
|
+
[LocalDateTime - now (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html#now-java.time.Clock-)
|
5
|
+
|
6
|
+
単体テスト等で使うことが多いと思いますが、今回の目的にも便利に使えます。
|
7
|
+
今の日時と入力された日時の差をオフセットした`Clock`を作ります。
|
8
|
+
[Clock - offset (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Clock.html#offset-java.time.Clock-java.time.Duration-)
|
9
|
+
[Duration - between (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Duration.html#between-java.time.temporal.Temporal-java.time.temporal.Temporal-)
|
10
|
+
|
11
|
+
後は普通の時計と同じように作るだけです(面倒なので超雑です^^;
|
12
|
+
```Java
|
13
|
+
import java.time.Clock;
|
14
|
+
import java.time.Duration;
|
15
|
+
import java.time.LocalDateTime;
|
16
|
+
import java.time.format.DateTimeFormatter;
|
17
|
+
import javax.swing.JButton;
|
18
|
+
import javax.swing.JFrame;
|
19
|
+
import javax.swing.JLabel;
|
20
|
+
import javax.swing.JPanel;
|
21
|
+
import javax.swing.JTextField;
|
22
|
+
import javax.swing.Timer;
|
23
|
+
|
24
|
+
public class Sample extends JFrame {
|
25
|
+
public static void main(String[] args) {
|
26
|
+
new Sample().setVisible(true);
|
27
|
+
}
|
28
|
+
|
29
|
+
private final DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern("yyyy/M/d/H:m:s");
|
30
|
+
private final DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd/HH:mm:ss");
|
31
|
+
|
32
|
+
// 使用するクロック(最初はデフォルト=普通の時計)
|
33
|
+
private Clock clock = Clock.systemDefaultZone();
|
34
|
+
|
35
|
+
Sample() {
|
36
|
+
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
37
|
+
setLocationRelativeTo(null);
|
38
|
+
setSize(300, 200);
|
39
|
+
|
40
|
+
var panel = new JPanel();
|
41
|
+
add(panel);
|
42
|
+
|
43
|
+
var label = new JLabel(outFormatter.format(LocalDateTime.now()));
|
44
|
+
panel.add(label);
|
45
|
+
|
46
|
+
var textField = new JTextField(20);
|
47
|
+
textField.setText("2015/11/3/15:30:00");
|
48
|
+
panel.add(textField);
|
49
|
+
|
50
|
+
var button = new JButton("⏲ 指定日時にタイムトラベル ⏲");
|
51
|
+
button.addActionListener(e -> {
|
52
|
+
// 日時フォーマットを指定してLocalDateTimeに変換(フォーマットがあっていなければ当然エラー)
|
53
|
+
var localDateTime = LocalDateTime.parse(textField.getText(), inFormatter);
|
54
|
+
// 今の日時との差
|
55
|
+
var duration = Duration.between(LocalDateTime.now(), localDateTime);
|
56
|
+
// クロックをずらす
|
57
|
+
clock = Clock.offset(Clock.systemDefaultZone(), duration);
|
58
|
+
});
|
59
|
+
panel.add(button);
|
60
|
+
|
61
|
+
new Timer(1000, e -> {
|
62
|
+
// クロックを指定して今の日時を取得(クロックがずれていれば、ずれた日時)
|
63
|
+
var localDateTime = LocalDateTime.now(clock);
|
64
|
+
// 日時フォーマットを指定してStringに変換
|
65
|
+
label.setText(localDateTime.format(outFormatter));
|
66
|
+
}).start();
|
67
|
+
}
|
68
|
+
}
|
69
|
+
```
|
70
|
+
|
71
|
+
日時フォーマット(0をつけるかどうか)がはっきりしなかったので入出力でわけましたが、お好きにどうぞ。
|
72
|
+
[DateTimeFormatter (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html)
|
73
|
+
|
74
|
+

|