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()为您提供自 1970 年 1 月 1 日称为Unix 纪元: 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
于 2013-08-24T21:58:32.787 回答
1

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

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

于 2013-08-24T21:51:53.990 回答