3

yyyy/mm/dd hh:mm:ss を出力する関数があります。6 時間進んでいるように見える時間を除いて、すべてが完全に正確です。理由についてのアイデアはありますか?

public static void dateAndTime() {
   Calendar cal = Calendar.getInstance();
    int month = cal.get(Calendar.MONTH)+1;
    int day = cal.get(Calendar.DATE);
    int year = cal.get(Calendar.YEAR);

    long totalMilliseconds = System.currentTimeMillis();
    long totalSeconds = totalMilliseconds / 1000;
    int currentSecond = (int)(totalSeconds % 60);
    long totalMinutes = totalSeconds / 60;
    int currentMinute = (int)(totalMinutes % 60);
    long totalHours = totalMinutes / 60;
    int currentHour = (int)(totalHours % 24);
       System.out.println (year + "-" + month + "-" + day + " " + currentHour + ":" + currentMinute + ":" + currentSecond);
}
4

2 に答える 2

2

currentTimeMillis()Unix エポックと呼ばれる一定の時点 ( 1970 年 1 月 1 日の 00:00:00 UTC)から 経過したミリ秒数を示します。

正しい時刻を取得する方法の 1 つを次に示します。

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

class Clock {
    public static void main(String[] args) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone("Europe/Athens"));
        Date currentDate = new Date();
        System.out.println(df.format(currentDate));
    }
}

出力 (アテネの現地時間):

2013-08-24 23:54:45
于 2013-08-24T21:58:32.787 に答える
1

これはタイムゾーンに関連する問題です。Calendarメソッド System.currentTimeMillis() が返されるのに対し、クラスはローカル タイム ゾーンにデフォルト設定されます (Javadoc で指定されているとおり)

現在時刻と 1970 年 1 月 1 日 UTC 午前 0 時との差 (ミリ秒単位)。

于 2013-08-24T21:51:53.990 に答える