山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

[yukicoder] No.652 E869120 and TimeZone

問題

No.652 E869120 and TimeZone - yukicoder

時刻に関する問題です。個人的にはこういう問題苦手なんですよね。

この問題とは関係ないですが、明日からはPython、Unity、Javaの勉強も入れていきます。

考え方

時刻ということで、値を分に合わせると、一日は0以上1440未満の数字で表すことができます1440 = 24 * 60 というわけです。

具体的にどのようにするかですが、JavaのDateクラスとCalendarを使います。

詳しくは下のサイトから。

【Java入門】Dateクラスで現在日時の取得と加算/減算などの計算(add) | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

UTCの後に続く数値を  X とすると、日本との時差を分に直すには

 60X - 540 分になります。

コード

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Exec0652a {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String h = scan.next();
        String m = scan.next();
        String t = scan.next();
        scan.close();
        int H;
        int M;
        double k;
        if(h.charAt(0) == '0') {
            H = Integer.parseInt(h.substring(1, 2));
        }else {
            H = Integer.parseInt(h.substring(0, 2));
        }
        if(m.charAt(0) == '0') {
            M = Integer.parseInt(m.substring(1, 2));
        }else {
            M = Integer.parseInt(m.substring(0, 2));
        }
        if(t.charAt(4) == '0') {
            k = Double.parseDouble(t.substring(3, t.length()));
        }else {
            k = Double.parseDouble(t.substring(3, t.length()));
        }

        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        Date date = new Date();
        try {
            String s = H + ":" + M;
            date = sdf.parse(s);
        }catch(ParseException e) {
            e.printStackTrace();
        }

        int d = (int)Math.round(k * 60) - 540;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, d);
        Date d1 = calendar.getTime();
        System.out.println(sdf.format(d1));
    }
}