

Javaプログラミングで困ってます。ご存知の方教えてください。

①画面のテキストボックスで入力された日付「形式 yyyy/MM/dd
HH:mm:ss」（JST）を、UTCとUnixTimeに変換したいです。また、UnixTimeをUTC、JSTの上記形式に変換したいです。どのようにしたらよろしいですか。

※テキストボックスで入力された値は、以下の通り取得後、変換し、別テキストボックスへ変換後の値を表示したい。  
text1.getText()

②下記の通り、現在時刻ボタンを押下した際に、時間を出力するようにしておりますが、停止ボタンを押下して、停止かつテキストボックス内の値をクリアする方法を教えてください。

[code]

    if("現在時刻".equals(cmdName)){
      // "red"の処理
      SwingUtilities.invokeLater(new Runnable() {
        public void run(){
    
          // ZonedDateTimeクラスでUTC時間を取得
          ZonedDateTime utc_time
          = ZonedDateTime.now(ZoneId.of("UTC"));
    
          // ZonedDateTimeクラスでJST時間を取得
          ZonedDateTime jst_time
          = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
    
          // ZonedDateTimeクラスでunixtimeを取得
          long unix_time = System.currentTimeMillis()/1000;
    
          // UTS時間とJST時間の表示形式変換（yyyy/mm/dd hh:mm:ss）
          String utc_aft = String.format("%1$tY/%1$tm/%1$td %1$tH:%1$tM:%1$tS",utc_time);
          String jst_aft = String.format("%1$tY/%1$tm/%1$td %1$tH:%1$tM:%1$tS",jst_time);
          String UNIX = String.valueOf(unix_time);
    
          text1.setText(utc_aft);
          text2.setText(jst_aft);
          text3.setText(UNIX);
    
          SwingUtilities.invokeLater(this);
        }
      });
    }
    
[/code]

申し訳ないですが、よろしくお願いいたします。


CC BY-SA 3.0
2018-04-24T14:46:06.277
43530
2018-04-29T22:37:13.347
2018-04-25T12:15:50.423
3060
28299
question
java
Javaで日付形式の変換に関する質問

[code]

    // import java.time.LocalDateTime;
    // import java.time.ZoneId;
    // import java.time.ZonedDateTime;
    // import java.time.format.DateTimeFormatter;
    // import javax.swing.SwingUtilities;
    
    private boolean isStopped = true;
    
    private void doAction(String cmdName) {
    
        if ("現在時刻".equals(cmdName)) {
            isStopped = false;
            // "red"の処理
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    if (isStopped) {
                        text1.setText("");
                        text2.setText("");
                        text3.setText("");
                        return;
                    }
    
                    // ZonedDateTimeクラスでJST時間を取得
                    ZoneId JST = ZoneId.of("Asia/Tokyo");
                    ZonedDateTime jst_time = ZonedDateTime.now(JST);
    
                    // JST時間の表示形式変換（yyyy/mm/dd hh:mm:ss）
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
                    String jst_aft = formatter.format(jst_time);
                    text2.setText(jst_aft);
    
                    // 文字列をJSTとして取得
                    jst_aft = text2.getText();
                    ZonedDateTime parsedJst = LocalDateTime.parse(jst_aft, formatter).atZone(JST);
                    // JST時間からUTC時間とunixtimeを取得
                    ZonedDateTime utc_time = parsedJst.withZoneSameInstant(ZoneId.of("UTC"));
                    long unix_time = parsedJst.toEpochSecond();
    
                    String utc_aft = formatter.format(utc_time);
                    String UNIX = String.valueOf(unix_time);
    
                    text1.setText(utc_aft);
                    text3.setText(UNIX);
    
                    SwingUtilities.invokeLater(this);
                }
            });
        } else if ("停止".equals(cmdName)) {
            isStopped = true;
        }
    }
    
[/code]

`DateTimeFormatter.ofPattern`メソッド引数として与える文字列(上記コード中では `"yyyy/MM/dd
HH:mm:ss"`)は、[APIドキュメント](https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html)に説明があります。


CC BY-SA 3.0
2018-04-25T06:00:04.780
43541
2018-04-25T06:08:33.897
2018-04-25T06:08:33.897
2808
2808
43530
answer


UnixTimeからの変換などについては以下のとおりです。  
文字列への変換は`formatter.format(utcTime)`のような感じでできます。

> ①画面のテキストボックスで入力された日付「形式 yyyy/MM/dd HH:mm:ss」（JST）を、UTCとUnixTimeに変換したいです。
[code]

    static final ZoneId UTC = ZoneId.of("UTC");
    static final ZoneId JST = ZoneId.of("Asia/Tokyo");
    static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
    
    // 中略
    
    final String jstText = text1.getText();
    
    final ZonedDateTime jstTime = ZonedDateTime.parse(jstText, formatter.withZone(JST));
    final ZonedDateTime utcTime = jstTime.withZoneSameInstant(UTC);
    final long unixTime = utcTime.toInstant().getEpochSecond();
    
[/code]

> また、UnixTimeをUTC、JSTの上記形式に変換したいです。どのようにしたらよろしいですか。
[code]

    static final ZoneId UTC = ZoneId.of("UTC");
    static final ZoneId JST = ZoneId.of("Asia/Tokyo");
    
    // 中略
    
    final long unixTime = // 省略
    
    final ZonedDateTime utcTime = ZonedDateTime.from(Instant.ofEpochSecond(unixTime).atZone(UTC))
    final ZonedDateTime jstTime = utcTime.withZoneSameInstant(JST);
    
[/code]


CC BY-SA 3.0
2018-04-25T06:25:03.510
43543
2018-04-25T08:27:56.277
2018-04-25T08:27:56.277
3068
3068
43530
answer