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 泛型