Java 使用currentTimeMillis及其';休息6小时

Java 使用currentTimeMillis及其';休息6小时,java,calendar,Java,Calendar,我有一个函数可以输出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(Calenda

我有一个函数可以输出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);
}

这是一个与时区有关的问题。
Calendar
类默认为本地时区,而方法System.currentTimeMillis()返回(如中所指定):

当前时间与UTC 1970年1月1日午夜之间的差值(以毫秒为单位)

提供自1970年1月1日名为:00:00:00 UTC的固定时间点以来经过的毫秒数

以下是获得正确时间的一种方法:

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