我有一个输出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);
}
答案 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日午夜时间之间的差异,以毫秒为单位。