Date与Calendar类

一、Date类

这里的类指的是java.util包中的类

    背景:在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。

       看上面的意思是如果使用时间的,推荐使用Calendar,但其实我经常见的还是Date类,很奇怪。

言归正传,我从官网找了类Date文档,先看下。

从上面可以看出,目前推荐的Date对象构造函数只有两个。其他的自jdk1.1就不推荐使用了。

1. 使用无参数构造方法

Date nowTime = new Date();
System.out.println(nowTime);
//Thu Nov 29 20:04:32 CST 2018

    此种方法获取的是本地计算机当前的日期和时间

2. 使用带参数的构造方法

计算机系统将其自身的时间的“公元”设置在1970年1月1日0时(格林威治时间),根据这个时间传入参数创建出Date对象。

其中的参数取整数,在格林威治时间上做加减法,然后转化成标准格式。

Date date = new Date(1000);
System.out.println(date);
//Thu Jan 01 08:00:01 CST 1970

    上图可以看出直接输出了,因为Date重写了toString()方法。之所以是8点,因为java程序的本地时区是北京时区(与格林威治时间相差8小时)。


还可以用System类的静态方法public long currentTimeMillis()获取系统当前的时间,如果运行时区是北京区,方法的返回值是自1970年1月1日8时到当前时间的毫秒数。

二、Calendar类

查看文档,可以发现Calendar类是抽象方法。所以并不能new一个对象。须使用Calendar类的静态方法getInstance()实例化。

Calendar cal = Calendar.getInstance();

这里我并没有输出,因为Calendar对toString()方法过于复杂,显示的内容太多。看下图源码对toString的重写,把各种信息全部输出了。

1. 常用的一些方法

public final void set(int year int month,int date);

public final void set(int year int month,int date,int hour,int minute);

public final void set(int year int month,int date,int hour,int minute,int second);

上面的三个方法可以将日历翻到任何一个时间。


Calendar对象也可调用方法public int get(int field)获取有关年份、月份、小时、星期等信,参数field的有效值有Calendar的静态常量指定。例如:

//Calendar.MONTH返回整数,如果该整数是0表示当前日历是在一月份,依次类推
int a = cal.get(Calendar.MONTH);
//Calendar.DAY_OF_WEEK返回整数,如果该整数是1表示星期日,依次类推
int b = cal.get(Calendar.DAY_OF_WEEK);

三、日期格式化

我们可能希望按照某种习惯来输出时间,如:2018年11月29日

背景:java早期使用java.text包中的DateFormat的子类SimpleFormat来实现日期的格式化。jdk1.5版本后提供了更为方便的Formatter类的format方法。

format(格式化模式,日期列表)

按照“格式化模式”返回日期列表所列的各个日期中所含数据。目前java已经将format方法作为String类的静态方法,所以可以直接调用了。下面举例说明:

String s = String.format("%ty-%tm-%td",new Date(),new Date(),new Date());

上面%ty 、%tm都是时间格式字符,每个格式字符对应一个日期列表中的对象,也就是他们格式的不是同一个对象。上面这个三个格式字符对应三个对象。

提出一个简便的方法,让他们格式同一个对象

String s = String.format("%<ty年%<tm月%<td日",new Date());

还有好多格式字符,可以到文档中查阅。例如:%tY  是格式为4位的年份形式;%ty是格式为2位的年份形式。

另外,日期列表可以是Calendar对象也可以是Date对象。


我再稍微说下使用SimpleDateFormat类格式化时间

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(new Date());

猜你喜欢

转载自blog.csdn.net/qq_36923376/article/details/84638666