0

現在の時刻から時刻を変更するようにユーザーに求める時計でJavaGUIを作成しています。システム時刻とユーザー時刻があります。ユーザーの時間を表示するためのコードはどうあるべきか。私が使用している次のコード:

        Date curDate = new Date();
        //changeTime i have got from the user
        double time=0;
        if(curDate.getTime()- changeTime.getTime() > 0){
            time = curDate.getTime() - changeTime.getTime();
            time = time/(1000);
        }
        else{
            time = changeTime.getTime()-curDate.getTime();
            time = time/(1000);
        }
        if(changeTime.getHours()==0 && changeTime.getMinutes()==0){
            time=0;
        }
        curDate.setHours(curDate.getHours()+(int)time/(3600));
        curDate.setMinutes(curDate.getMinutes()+((int)time/60)%60);
4

2 に答える 2

1

Anew Date()は「協定世界時 (UTC) を反映することを意図しています」。ユーザーが時計に表示する内容は、日付のレンダリングに使用さTimeZoneれる で指定できるによって異なります。DateFormat以下の例では、同じ瞬間を GMT で表示し、ニューヨークからベルリンまでのタイム ゾーンを選択して表示しています。

補遺:モデルとして、またそのモデルのビューとして考えるDate役立つと思います。DateFormat

2013 年 2 月 3 日 18:01:42 GMT GMT 1359914502673
2013 年 2 月 3 日 13:01:42 EST アメリカ/ニューヨーク 1359914502673
2013 年 2 月 3 日 14:01:42 AST アメリカ/アルバ 1359914502673
2013 年 2 月 3 日 15:01:42 アート アメリカ/ブエノスアイレス 1359914502673
2013 年 2 月 3 日 16:01:42 BRST アメリカ/サンパウロ 1359914502673
2013 年 2 月 3 日 17:01:42 AZOT 大西洋/アゾレス諸島 1359914502673
2013 年 2 月 3 日 18:01:42 GMT ヨーロッパ/ロンドン 1359914502673
2013 年 2 月 3 日 19:01:42 CET ヨーロッパ/ベルリン 1359914502673

パッケージの日付;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/** @see http://stackoverflow.com/a/14675418/230513 */
public class TestSDF {

    private static final String s = "dd-MMM-yyyy HH:mm:ss zz";
    private static final DateFormat f = new SimpleDateFormat(s);

    public static void main(String[] args) {
        Date date = new Date();
        print("GMT", date);
        print("America/New_York", date);
        print("America/Aruba", date);
        print("America/Buenos_Aires", date);
        print("America/Sao_Paulo", date);
        print("Atlantic/Azores", date);
        print("Europe/London", date);
        print("Europe/Berlin", date);
    }

    private static void print(String tz, Date d) {
        f.setTimeZone(TimeZone.getTimeZone(tz));
        System.out.println(f.format(d)
            + " " + tz
            + " " + d.getTime());
    }
}
于 2013-02-03T17:55:49.613 に答える
0

簡単なアプローチの1つは、システム時間をユーザー時間に応じて取得するadd subtractことです。

たとえば、システム時間は午後2時で、ユーザーは時間を午後4時に変更し、システム時間にさらに2時間を追加して、ユーザー時間の必要なフィールドに表示します。

于 2013-02-03T13:52:58.153 に答える