Java 日期 Date类 SimpleDateFormat类

Java中的日期类是常用的工具类了,使用日期相关操作常用到 Date类表示时间 用SimpleDateFormat来处理时间的表现形式。本文来总结一下这两个类的常用方法。
在这里插入图片描述


Date类

首先来介绍下基础的日期类:Date。这个类在包 java.util 下,表示一个时间点。

时间的表示

在计算机中,时间的单位是毫秒,任意一个时间点都是一个毫秒数。

时间的零点,是 1970年的1月1日0时0分0秒0毫秒。可以看作是计算机时间的元年。

java使用一个 long 类型来记录这个毫秒数表示时间。Date类中记录时间的变量正是一个 long 类型。这个 long 类型提醒我们,时间的毫秒数自然可以取负值,不然1970年之前的日子没法表示了2333。。。。

使用 java 中的 system对象可以可到当前时间的毫秒数:

long currentTime = System.currentTimeMillis();

构造方法

在早前的版本中,Date类拥有很多种不同的构造方法,可以根据传入的年月日时分秒构造。但是随着版本的更迭,这些方法被淘汰了,变成了不建议使用的方法。
现在可以正常使用的构造方法仅有两种:

  • 默认的无参构造方法,将时间默认设置为当前时刻
  • 传入毫秒值的构造方法,表示传入的那个毫秒值的时刻

下面看个示例:

import java.util.Date;//不要忘记引包
public class Main
{
	public static void main(String[] args)
	[
		Date zeroPoint = new Date(0);
		Date now = new Date();
	}
}

常用方法

和构造方法的遭遇一样,Date类的常用方法也在版本的更迭中遭受到了阉割。一些格式上的操作如获取年月日等操作被拿到了其它的类中,Date类的功能变得愈发简单——表示时间(博主认为这样的设计满足单一职责原则,是一种很好的趋势)。
因此常用方法主要体现在时间本身上:比较时间、查改时间以及 toString 方法

toString

我们先说 toString 方法。这个方法是默认父类 Object 中的,在 Date 中的实现,是将对象记录的时间点翻译成字符串返回。
这使得我们可以直接打印一个时间对象:

import java.util.Date;//不要忘记引包
public class Main
{
	public static void main(String[] args)
	[
		Date now = new Date();
		System.out.println(now);
	}
}

结果:
在这里插入图片描述
这个正是博主码这篇博客的时间点。

查改时间

实际上,就是对象的时间成员变量的 get 和 set 方法,名称是: getTime() 和 setTime()

获取时间方法的返回类型是 long ,就是时间的毫秒数。
在这里插入图片描述
设置时间方法需要传入一个 long 类型表示新的时间毫秒数,无返回值。
在这里插入图片描述
看个实例:

Date zeroPoint = new Date();
long now = zero.getTime();
zeroPoint.setTime(0L);//这里即使不表明是 long 类型,编译器也会进行自动转换。

比较方法

时间类还有比较方法用来比较两个时间。首先一个是 Date 实现了 Comparable 接口中的 compareTo 方法,这个方法的返回值是个 int 类型。两者比较,负前者小、零相同、正后者小。

Date date1 = new Date(5000);
Date date2 = new Date(5001);
date1.compareTo(date2);

然后是 before 方法和 after 方法。这两个方法的返回类型是 boolean 表示传入的时间是否在前(后)。

Date date1 = new Date(5000);
Date date2 = new Date(5001);
boolean flag1,flag2;
flag1 = date1.before(date2);
flag2 = date2.after(date1);

SimpleDateFormat类

这个类用于将时间与字符串互相转换。在包 java.text下

对日期的表示

在设置相对应的格式时,需要使用特定的符号来代表日期中的元素如年月日等。

这里枚举出常用的符号:

  • yy表示两位的纪年,yyyy表示四位数的纪年
  • MM表示两位的月
  • d表示月中的日期,dd表示两位的日,D表示年中的日期
  • HH表示24小时制的小时数,hh表示12小时制的小时数
  • mm表示分钟
  • ss表示秒
  • S表示毫秒
  • a上下午标志
  • z表示时区

例如,若日期的格式为

 "年-月-日 时:分:秒 上/下午 时区"

对应的字符串应为:

"yyyy-MM-dd HH:mm:ss a z"

构造方法

常用的构造方法也是两种,一种是传入一个字符串作为格式。另一种是默认的,使用默认格式进行初始化(应该是"yy-M-d ahh:mm")。

使用刚刚说到的格式作为例子:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a z");

常用方法

时间转换字符串

最常用的方法,就是将时间对象转化成给定格式的字符串方法
在这里插入图片描述

Date now = new Date();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a z");
System.out.println(s.format(now));	

结果:
在这里插入图片描述

字符串转换时间

另外一个常用方法,是将字符串转化为时间。
在这里插入图片描述
需要注意的是,这个方法或跑出一个格式错误异常,当传入的字符串的格式不符合给定格式时就会抛出这个异常,否则会返回一个对应的时间对象;

public static void main(String[] args) throws ParseException	//抛异常,千万不要忘记了
{
	SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
	Date date = s.parse("2002-10-10");
}

如果觉得文章有用的话,欢迎收藏关注哦~~
其他 java基础文章:
JAVA包装类,Number类总结 包装类常用方法 结合源码分析
Java 枚举类型
Java File类 使用规则及常用方法整理
Java 内部类 成员内部类 静态内部类 局部内部类 匿名内部类
Java 泛型

猜你喜欢

转载自blog.csdn.net/wayne_lee_lwc/article/details/105653276