Java 日期类

System类中的currentTimeMillis()方法、Date类、DateFormat类,SimpleDateFormat类、Calendar类、TimeZone类

System类


  • 所属的包java.lang,不需要导入
  • 不需要创建对象,通过类名就可以访问
  • 有三个属性及若干的方法
  • 三个属性 inouterr
  • 方法gc(),exit(0),currentTimeMillis()

重点在于currentTimeMillis(),它返回一个当前系统时间与计算机元年之间的毫秒值(返回类型为long

计算机元年:1970-1-1 00:00:00左右吧

写个例子:

public class Demo {
    public static void main(String[] args){
        long time = System.currentTimeMillis();
        System.out.println(time);
    }
}

result:
在这里插入图片描述
这个System类中的currentTimeMillis()方法,只能返回毫秒值,不太好

Date类


  • 可以导入的包虽然不止一个,通常使用的是java.util
    在这里插入图片描述
  • 通常使用new Date()或者new Date(long date)这两个构造方法来构造对象

Date类中有很多构造方法和方法都已过时(虽然也能使用,但是系统不推荐使用)

import java.util.Date;

public class Demo {
    public static void main(String[] args){
        Date date = new Date();//默认用当前的系统时间构建date对象
        System.out.println(date);//重写了toString,显示的是格林威治时间
    }
}

在这里插入图片描述

  • before()方法,若a.before(b)a的时间在b之前,则返回true,否则Kfalse
  • after()方法,与上面方法相反
import java.util.Date;

public class Demo {
    public static void main(String[] args){
        Date date1 = new Date(1556030769233L); //这个时间是前面的
        Date date2 = new Date();//默认用当前的系统时间构建date对象
        System.out.println(date1.before(date2)+"----"+date1.after(date2));
    }
}

在这里插入图片描述

  • getTime()方法,获取对象的时间
  • setTime()方法,设置对象的时间,都是毫秒值
import java.util.Date;

public class Demo {
    public static void main(String[] args){
        Date date1 = new Date();
        date1.setTime(1556030769233L);
        System.out.println(date1.getTime());
    }

}

在这里插入图片描述

DateFormat类,SimpleDateFormat类


  • 可以处理一个Date日期的格式
  • 所属的包java.text,需要导包使用
  • 但它是抽象类,不能创建对象,要子类来使用
  • SimpleDateFormat类是DateFormat的子类
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo {
    public static void main(String[] args){
        Date date1 = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式具体含义看下表
        String v = sdf.format(date1);//通过sdf对象将date1格式化成你描述的样子
        System.out.println(v);
    }

}

在这里插入图片描述
在这里插入图片描述

Calendar类


1.1版本之后出现的,把时区给考虑进去了

  • 所属的包java.util,需要导包

  • 有构造方法,但是是用protected修饰的,通常是访问不到的;
    在这里插入图片描述

  • 但是它提供了一些方法来获取对象,通常会调用默认的getInstance()方法来创建对象
    在这里插入图片描述
    常用方法:

  • after()

  • before()

  • getTime()

  • setTime(),以上四个方法和Date类中的是一样的

  • getTimeMillis()返回毫秒值

  • getTimeZone()返回时区

  • 还可以使用setget来设置它的一部分,通过Calendar类已经定义好的许多静态常量

import java.util.Calendar;

public class Demo {
    public static void main(String[] args){
        Calendar calendar = Calendar.getInstance();//获取系统当前时间的Calendar对象
        System.out.println(calendar);
    }
}

注意:System.out.println(calendar);
这个语句输出的是java.util.GregorianCalendar[time=1556033493046,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=3,WEEK_OF_YEAR=17,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=113,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=31,SECOND=33,MILLISECOND=46,ZONE_OFFSET=28800000,DST_OFFSET=0]
解释一下:

java.util.GregorianCalendar//这是包名.类名

然后跟着这个后面的是一个中括号,里面包含的所有信息[name = value,name = value, ...],这种形式是JSON

在看一下get的用法:

import java.util.Calendar;

public class Demo {
    public static void main(String[] args){
        Calendar calendar = Calendar.getInstance();//获取系统当前时间的Calendar对象
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);//它这玩意有点怪异,是从0开始数的
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year+"-"+month+"-"+day);
    }
}

在这里插入图片描述
实际上表示的是 2019-4-23

然后调用set方法,可以随意改动它里面的任意一个局部

TimeZone类


import java.util.Calendar;
import java.util.TimeZone;

public class Demo {
    public static void main(String[] args){
        Calendar calendar = Calendar.getInstance();
        //创建TimeZone的对象有两个方式:
        //TimeZone tz = TimeZone.getDefault();//第一个方式
        TimeZone tz = calendar.getTimeZone();//第二种方式

        //TimeZone有两个方法
        System.out.println(tz.getID());
        System.out.println(tz.getDisplayName());

    }
}

在这里插入图片描述

发布了150 篇原创文章 · 获赞 267 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Zhangguohao666/article/details/103438378