与时间相关的Java方法 心得分享
前言:
在Java程序中日期开始的时间是1970年1月1日00:00:00,所以在日期储存中的0代表了该时间点。而在我们东八区,则代表着1970年1月1日08:00:00。那么,负数代表了这个时间点之前的时间,正数代表了该时间点之后的时间。
由于日期基数比较大,一般采用长整型数字对其进行保存,保存的时间是从默认时间节点到你当期时间的毫秒数。
常用日期相关类
1.Date类,表示特定的瞬间,精确到毫秒。
在使用的时候需要导入java包
import java.util.Date;
1.1 Date类分配了一个Date对象,初始化为当前时间节点,精确到毫秒。
简易使用方法
//创建一个当前时间的时间对象
Date date=new Date();
//打印当前时间对象的时间节点
System.out.println("当前时间节点:"+date);
//打印当前时间节点与默认时间的毫秒数
System.out.println("默认时间到当前时间节点的毫秒数:"+date.getTime());
输出结果如下:
1.2 Date类分配Date对象并初始化对象,表示自默认节点开始的毫秒数。
//创建一个自定义的时间对象,距离默认时间1000毫秒
Date date1=new Date(1000);
//打印当前时间对象的时间节点
System.out.println("该时间节点:"+date1);
//打印当前时间节点与默认时间的毫秒数
System.out.println("默认时间到该时间节点的毫秒数:"+date1.getTime());
输出结果如下:
由于我在初始化对象的时候给了它1000毫秒的时间,所以显示的是默认时间点之后的1秒。
2. System 类 currentTimeMillis(): 当前时间,该方法具有long类型的返回值,表示的是当前的毫秒数。
//当前的毫秒数
long time=System.currentTimeMillis();
//打印
System.out.println("默认节点到当前时间节点的毫秒数"+time);
输出如下:
3. SimpleDateFormat 格式器
常见方法:
new SimpleDateFormat(模板)
format() : 格式化为字符串
parse():转成日期 (该方法存在ParseException异常的可能,此处需要对其进行异常抛出)
格式器需要导包
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate02 {
public static void main(String[] args) throws ParseException {
//创建当前时间对象
Date date=new Date();
//字符串格式 此处格式可根据需求自己定义
//yyyy-MM-dd HH:mm:ss
//yyyy年MM月dd日 HH时mm分ss秒
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//日期 转 格式化字符串
// format()方法实现
String dateStr=dateFormat.format(date);
//打印格式化字符串对象
System.out.println("打印指定格式时间(字符串类型):"+dateStr);
//固定格式字符串 转成日期 yyyy-MM-dd HH:mm:ss
//parse()方法实现
date=dateFormat.parse("2020-08-05 10:00:00");
//打印到指定时间毫秒数
System.out.println("打印当前时间点:"+date.getTime());
}
}
输出内容如下:
实用的日期类
1.Year 年
now():今年
2.Month 月(枚举类)
JANUARY:一月
FEBRUARY二月
…
3.LocalDate 本地日期
now():不包含时分秒的本时区的当前时间
of(年,月,日):构建本时区的时间
4.LocalDateTime 本地时间
now():包含时分秒的本时区的当前时间
of(年,月,日,时,分,秒):构建本时区的时间
format() : 格式化为字符串
parse():转成日期
演示代码如下:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Year;
public class TestDate03 {
public static void main(String[] args) {
//今年
System.out.println("今年年份是:"+Year.now());
System.out.println("指定年份是:"+Year.of(1999));
//月份
System.out.println("指定月份是:"+ Month.MAY);
//不包含时分秒的今天
LocalDate today=LocalDate.now();
System.out.println("今天:"+today);
//此时此刻,包含时分秒
LocalDateTime now= LocalDateTime.now();
System.out.println("现在:"+now);
//您的生日 指定日期
LocalDate yourBirthDate = LocalDate.of(2000, Month.MAY, 1);
System.out.println("生日:"+yourBirthDate);
//您的学习时间 指定时间点
LocalDateTime dateTime = LocalDateTime.of(2020, 2, 25, 12, 30,40);
System.out.println("时间:"+dateTime);
}
}
输出结果如下:
5.DateTimeFormatter 格式器
演示代码如下:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TestDate04 {
public static void main(String[] args) {
//日期转换器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化日期字符串
LocalDateTime now=LocalDateTime.now();
//将 时间 放入 指定格式器
String nowTime=now.format(formatter);
//打印当前时间
System.out.println("转换个时候后时间显示为:"+nowTime);
//字符串转日期
//指定日期格式字符串
String dateStr= "2020-02-25 11:23:04";
//放入格式器 转成日期
LocalDateTime date= LocalDateTime.parse(dateStr, formatter);
//获取年
System.out.println("获得的年份为:"+date.getYear());
//获取月
System.out.println("获得的月份为:"+date.getMonth());
// 获取日 月份中的几号
System.out.println("获得的日为:"+date.getDayOfMonth());
}
}
输出结果如下:
6.间隔类
Period 时期
between():间隔 年月日
Duration 持续期间
ofDays(天数):天
ofHours(小时数):时
ofMinutes(分钟数):分
ofSeconds(秒数):秒
Instant 瞬间
now():现在
plus():添加
minus():相减
ChronoUnit 期量单位
YEARS、MONTHS、DAYS、HOURS、MINUTES、SECONDS
getDuration() :获取
Duration between():间隔
演示代码如下:
import java.time.*;
import java.time.temporal.ChronoUnit;
public class TestDate05 {
public static void main(String[] args) {
//创建当前时间对象
LocalDate today = LocalDate.now();
//创建指定时间对象
LocalDate birthDate = LocalDate.of(2000, 1, 1);
//时期间隔 年月日 生日和当前时间之间的时间差
Period p = Period.between(birthDate, today);
System.out.println(p.getYears()+"年"+p.getMonths()+"月"+p.getDays()+"日 ");
LocalDate startDate = LocalDate.of(2020, 8, 1);
LocalDate endDate = LocalDate.of(2021, Month.JANUARY,5);
//期量单位 间隔
long between =ChronoUnit.YEARS.between(startDate, endDate);
System.out.println("两时间 年之间的差 : " + between); //0 不是1不满一年不计算 在内
between = ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println("两时间 月之间的差 : " + between); //5 不是6不满一月不计算 在内
// 瞬间
Instant inst1 = Instant.now();
Instant inst2 = inst1.minus(Duration.ofSeconds(10));
System.out.println("毫秒相隔 : " + Duration.between(inst1, inst2).toMillis());
System.out.println("秒相隔 : " + Duration.between(inst1, inst2).getSeconds());
}
}
输出结果如下:
后记:
在整个Java程序中,时间类在处理与时间相关的程序能够带来极大的便利性。有效的时间类,能过节约极大的运行空间。
时间类还有好多好多的内容,只有在使用的时候才能够记得去使用,在此分享该内容,主要是为了记住有部分方法的存在,节约使用者的时间。