java基础:6.4 日期类、日历类

时间:2022-12-24 18:08:53

 

1.日期

  1. 用到的是: date() 得到当前时间信息 Date d1 = new Date();,使用时需要引用类 java.util.Date;

    Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点,因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时)

    为什么对应1970年呢? 因为1969年发布了第一个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。每过1毫秒+1。

  2. getTime() 得到一个long型的整数,距离时间原点经过的总毫秒数。

    从1970.1.1 08:00:00:000 开始,每经历一毫秒,增加1。
    System.out.println(d1.getTime()); //1552544316665

    这种方法得到的值很不直观对吧,"1552544316665"这结果没啥有效信息啊。所以,推荐采用0构造法,得到一个1970.1.1 08:00的标准格式的时间。
    Date zero = new Date(0);
    System.out.println(“用0作为构造方法,得到的日期是:”+zero);

  3. System.currentTimeMillis() 距离时间原点经过的总毫秒数。
    new Date().getTime() 是一样的,但执行程序的机器不同、性能可能不同,时间会存在差异。

  4. 格式化日期格式输出 SimpleDateFormat,属于类java.text.SimpleDateFormat;
    创建对象时()中的格式不同,得到的显示也不同。下图是eclipse给出的阳历
    java基础:6.4 日期类、日历类
    结果以数字显示的 :y-m-d H:m:ss SS 分别代表 年 月 日 时 分 秒 毫秒
    结果以字母显示的 E = 星期x , MMM = x月 , a = pm/下午 ,

		SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
        Date d= new Date();
        String str = sdf.format(d);
        System.out.println(str);  // 2019-10-14 15:10:45 952

 
 

2. 日历类

. 为 Calendar类,属于java.util.Calendar;

      Calendar c = Calendar.getInstance();
      Date now = c.getTime();  // 获取时间
      System.out.println("now is " + now);   // now is Thu Mar 14 16:30:28 CST 2019
      Date d3 = new Date(0);
      c.setTime(d3);  // 重新设置时间

. 翻日历操作

       public static void main(String[] args) {
      Calendar c = Calendar.getInstance();
      Date now = c.getTime();
      // 当前日期
      System.out.println("当前日期:\t" + format(c.getTime()));

      // 下个月的今天
      c.setTime(now);
      c.add(Calendar.MONTH, 1);
      System.out.println("下个月的今天:\t" +format(c.getTime()));

      // 去年的今天
      c.setTime(now);
      c.add(Calendar.YEAR, -1);
      System.out.println("去年的今天:\t" +format(c.getTime()));

      // 上个月的第三天
      c.setTime(now);
      c.add(Calendar.MONTH, -1);
      c.set(Calendar.DATE, 3);
      System.out.println("上个月的第三天:\t" +format(c.getTime()));

  }

  private static String format(Date time) {
      return sdf.format(time);
  }
  ```