使用默认时区即东八区:
int ONE_SECOND = 1000;
int ONE_MINUTE = 60*ONE_SECOND;
int ONE_HOUR = 60*ONE_MINUTE;
long ONE_DAY = 24*ONE_HOUR;
long ONE_WEEK = 7*ONE_DAY;
println("one week: " + ONE_WEEK);
println("one day: " + ONE_DAY);
GregorianCalendar calendar = new GregorianCalendar(1970,0,1);
long timestamp = calendar.getTimeInMillis();
println("timestamp: " + timestamp);
println("minute: " + timestamp/ONE_MINUTE);
timestamp为根据构造方法传入的时间和使用的时区,首先把时间转换为零时区(即英国格林尼治天文台旧址)的时间后,再转化为相对于1970,1月1日00:00:00的毫秒数。
所以如果不设置时区TimeZone,则上述代码得出的不是0,而是-28800000,即-8小时。因为东八区比零时区晚了8小时。再设置时区后,timestamp就为0了,代码如下:
int ONE_SECOND = 1000;
int ONE_MINUTE = 60*ONE_SECOND;
int ONE_HOUR = 60*ONE_MINUTE;
long ONE_DAY = 24*ONE_HOUR;
long ONE_WEEK = 7*ONE_DAY;
println("one week: " + ONE_WEEK);
println("one day: " + ONE_DAY);
GregorianCalendar calendar = new GregorianCalendar(1970,0,1);
calendar.setTimeZone(new SimpleTimeZone(0, "GMT"));
long timestamp = calendar.getTimeInMillis();
println("timestamp: " + timestamp);
println("minute: " + timestamp/ONE_MINUTE);
SimpleTimeZone中的第一个参数为与零时区相差的毫秒数,如果是设置为东八区的话,那么应该设置成:
calendar.setTimeZone(new SimpleTimeZone(-ONE_HOUR*8, "GMT"));
第二个参数,设置为GMT和UTC是一样的结果。理论上,UTC才是目前的标准世界时,GMT与UTC大概相差0.9秒。但是在代码中使用UTC或者GMT参数,得到的timestamp的结果是一样的。
月是从0开始的,dayOfMonth是从1开始的。