Java中GregorianCalendar的基本使用

使用默认时区即东八区:

        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开始的。

猜你喜欢

转载自blog.csdn.net/b1480521874/article/details/89088090