使用currentTimeMillis,它是6个小时的休息时间

时间:2013-08-24 21:46:49

标签: 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(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);
}

2 个答案:

答案 0 :(得分:2)

currentTimeMillis()为您提供自the Unix epoch的固定时间点起经过的毫秒数:<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

答案 1 :(得分:1)

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

  

当前时间与1970年1月1日午夜时间之间的差异,以毫秒为单位。