0

GregorianCalendarに問題があるので、よろしければ手伝ってください。まず、私のコードを紹介します。

private String changeClock(String day, String clock, int change) {
    String time="";
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm");
    try {
        Date d=df.parse(day+" "+clock);
        GregorianCalendar g=new GregorianCalendar();
        g.setTime(d);
        g.add(GregorianCalendar.HOUR_OF_DAY, change);
        time=g.get(GregorianCalendar.YEAR)+"-"
                +(g.get(GregorianCalendar.MONTH)+1)+"-"
                +g.get(GregorianCalendar.DAY_OF_MONTH)+" "
                +g.get(GregorianCalendar.HOUR_OF_DAY)+":"
                +g.get(GregorianCalendar.MINUTE);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return time;
}

何が起こっているのか説明させてください。+ボタンと-ボタンのあるGUIがあります。誰かが+を押すと1時間追加され、-が押されると1時間かかります。

たとえば、時刻は23:00で、+を押すと、すべて問題なく、翌日の00:00にジャンプします。問題は12:00にあります。12:00で、+を押すと、1:00になり、それが続きます。2x12時間または21465x12時間後でも、翌日に移動しません。私がそう言うことができれば、後方に移動する方が少し良いです。00:00になって、-を押すと、昨日の23:00に変わります(日付も変わります)。次に+を押すと、1日先にも変更されます(この場合は今日に変更されます)。

何を間違えたのですか、それともコードにさらに何を書くべきですか?

助けてくれてありがとう。

4

2 に答える 2

3

日付形式が間違っています...

「午前/午後(1〜12)の時間」hhを表すを使用しているため、代わりに午後1時の時刻が午前1時に変換されます。

「Hourinday(0-23)」をHH表すものを使用する必要があります。

それか、午前/午後マーカー付きの日付/時刻形式を指定する必要があります...

またはのいずれDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm");かを使用するDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm a");

日付/時刻の値に依存する代わりにString、オブジェクトを渡したり戻したりする必要がありDateます。表示のフォーマットはそのままにしておきます。

于 2013-01-10T23:24:09.047 に答える
0
于 2016-09-17T21:44:01.253 に答える