第10章 常用类

40 篇文章 0 订阅
40 篇文章 0 订阅

10.5 JDK1.8之前日期时间类

10.5.1 java.lang.System类

 

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒GMT之间以毫秒为单位的时间差。此方法适于计算时间差。

10.5.2 java.util.Date

它的对象表示一个特定的瞬间,精确到毫秒。

Java中时间的表示说白了也是数字,是从标准纪元1970年1月1日0时0分0秒GMT到某个时刻的毫秒数,类型是long

理解:一维的时间轴,选择1970年1月1日0时0分0秒时间为0刻度,1毫秒一刻度

构造方法:

  1. Date():      源代码:this(System.currentTimeMillis());
  2. Date(long date)

常用方法:

  1. getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
  2. toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

   dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat), zzz是时间标准。

 

已过时的方法:

  1. public Date(int year,int month,int date,int hrs,int min,int sec)

参数:

year - 减 1900 的年份。

month - 0-11 之间的月份。

date - 一月中 1-31 之间的某一天。

hrs - 0-23 之间的小时数。

min - 0-59 之间的分钟数。

sec - 0-59 之间的秒数。

  1. getYear() 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
  2. getMonth()从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。返回的值在 0 和 11 之间,值 0 表示 1 月。
  3. getDate() JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。返回的值在 1 和 31 之间
  4. getDay()从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。 返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 表示一周中的某一天
  5. getHours()从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。返回值是一个数字(0 至 23)
  6. getMinutes()从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 返回值在 0 和 59 之间。
  7. getSeconds()从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。回的值在 0 和 61 之间。值 60 和 61 只可能发生在考虑了闰秒的 Java 虚拟机上。

10.5.3 java.util.TimeZone和Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值,日期就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

获取Locale对象:

 Locale(String language)

 Locale(String language, String country)

 Locale.CHINA、Locale.US等

       public static void main(String[] args) {

              Locale loc = Locale.CHINA;

              System.out.println(loc);//zh_CN

              System.out.println(Locale.US);//en_US

              System.out.println(Locale.JAPAN);//ja_JP

             

              Locale c = new Locale("zh","CN");

              System.out.println(c);

       }

通常,使用 TimeZone的getDefault 获取 TimeZone,getDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。

 

也可以用TimeZone的 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:

 

 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");

       public static void main(String[] args) {

              TimeZone t = TimeZone.getDefault();

              System.out.println(t);

             

              TimeZone t1 = TimeZone.getTimeZone("America/New_York");

              System.out.println(t1);

             

              TimeZone t2 = TimeZone.getTimeZone("Asia/Shanghai");

              System.out.println(t2);

       }

              String[] all = TimeZone.getAvailableIDs();

              for (String id : all) {

                     System.out.println(id);

              }

 

10.5.4 java.util.Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁。而且Calendar提供了很多关于日期时间计算的方法。

GregorianCalendar(公历)是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

注意:

月份:一月是0,二月是1,以此类推,12月是11

星期:周日是1,周二是2,。。。。周六是7

//默认语言环境的时间(时区)

              Calendar c = new GregorianCalendar();

              /*

               * java.util.GregorianCalendar[

               * time=1480667849712,

               * areFieldsSet=true,

               * areAllFieldsSet=true,

               * lenient=true,

               * zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],

               * firstDayOfWeek=1,

               * minimalDaysInFirstWeek=1,

               * ERA=1,

               * YEAR=2016,

               * MONTH=11,

               * WEEK_OF_YEAR=49,//本年第49周

               * WEEK_OF_MONTH=1,//本月第1周

               * DAY_OF_MONTH=2,

               * DAY_OF_YEAR=337,//本年第337天

               * DAY_OF_WEEK=6,

               * DAY_OF_WEEK_IN_MONTH=1,        

               * AM_PM=1, //下午

               * HOUR=4,

               * HOUR_OF_DAY=16,  //HOUR12小时制, HOUR_OF_DAY24小时制

               * MINUTE=37,

               * SECOND=29,

               * MILLISECOND=712,

               * ZONE_OFFSET=28800000,

               * DST_OFFSET=0]

               */

    public static void main(String[] args) {

        //默认语言环境的时间(时区)

        Calendar c = new GregorianCalendar();

       

        int year=c.get(Calendar.YEAR);

        int month=c.get(Calendar.MONTH);

        int date=c.get(Calendar.DAY_OF_MONTH);

       

        int hour=c.get(Calendar.HOUR_OF_DAY);

        int minute=c.get(Calendar.MINUTE);

        int second=c.get(Calendar.SECOND);

        int mill=c.get(Calendar.MILLISECOND);

        int week=c.get(Calendar.DAY_OF_WEEK);

       

        StringBuffer dateStr=new StringBuffer();

        dateStr.append(year).append("年");

        dateStr.append(month+1).append("月");

        dateStr.append(date).append("日").append("  ");

        dateStr.append(hour).append("时");

        dateStr.append(minute).append("分");

        dateStr.append(second).append("秒");

        dateStr.append(mill).append("毫秒").append("  ");

       

        String[] weeks={"日","一","二","","四","五","六"};

        dateStr.append("星期").append(weeks[week-1]);

       

        System.out.println(dateStr);

    }

    public static void main(String[] args) {

        Calendar c = new GregorianCalendar(2015, 6, 13);

//      c.set(2016, Calendar.DECEMBER, 4, 12, 12, 0);

//      c.setTime(new Date());

        //15天之后

        //c.add(Calendar.DATE, 15);

        //2个月之前

        //c.add(Calendar.DAY_OF_MONTH, -2);

        //12小时之后

        c.add(Calendar.HOUR, 12);

       

        Date time = c.getTime();//转成日期

        System.out.println(time);

    }

 

public static Calendar getInstance()使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。

public static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定的时区和给定的语言环境。

       public static void main(String[] args) {

              Calendar c = Calendar.getInstance();

              System.out.println(c);

             

              Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);

              System.out.println(c2);

             

              Calendar c3 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);

              System.out.println(c3);

       }

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值