栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

28.Java之日期类(Date类,SimpleDateFormat类, Calendar 类,LocalDateTime类,DateTimeFormatter 类)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

28.Java之日期类(Date类,SimpleDateFormat类, Calendar 类,LocalDateTime类,DateTimeFormatter 类)

28.1.一代目 1. Date 类:精确到毫秒,代表特定的瞬间

java.util包
把1970年1月1日当做了时间原点,以毫秒值为单位

2. SimpleDateFormat 类:格式和解析日期类

SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化
JDK8版本

字母日期或时间元素示例
y1970;07
Y周年[当这周跨年时,这周算下一年]2009;09
M年中的月份July;Jul;01
w年中的周数27
W月份中的周数2
D年中的天数189
d月份中的天数10
F月份中的星期2
E星期中的天名Tuesday;Tue
u星期中的天数(1=Monday,…,7=Sunday)2
aAM/PM标记PM
h12时制(1-12 am/pm)12
H一天中的小时数(0-23)0
k一天中的小时数(1-24)24
Kam/pm中的小时数(0-11)0
m小时中的分钟30
s分钟里的秒数55
S毫秒数978
3.示例
Date d1 = new Date();//获取当前系统时间
Date d2 = new Date(92115456);//获取指定毫秒数得到时间
//Date 转换成 String
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1);
System.out.println("当前日期=" + format);
//String 转换成 Date,使用的 sdf 格式需要和给的String格式一样,否则会抛出异常
String s = "2021年4月20日 20:13:14 星期二";
Date parse = sdf.parse(s);
28.2.二代目 1. Calendar 类(日历)
  1. 它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
  2. Calendar 是一个抽象类,并且构造器是 private,可以通过 getInstance()来获取实例,提供大量的方法和字段提供给开发人员
2. 常用方法

获取时间:

//创建日历对象
Calendar c = Calendar.getInstance();
//获取日历对象的某个日历字段
	System.out.println("年:" + c.get(Calendar.YEAR));
	//返回月的时候按照 0 开始编号
	System.out.println("月:" + (c.get(Calendar.MONTH)+1));
	System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
	System.out.println("时:" + c.get(Calendar.HOUR));
	System.out.println("分:" + c.get(Calendar.MINUTE));
	System.out.println("秒:" + c.get(Calendar.SECOND));

Calendar 没有专门的格式化方法,所以需要自己来组合显示

设置时间:
月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 2 月 15 日除夕当晚的倒计时的最后一秒: 2018-02-15 23:59:59
可以这样:

Calendar cal = Calendar.getInstance();
// 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);

或者也可以单个字段一一设置:

// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());

时间计算
add方法:
比如 1 月 31 号的时候,月份加一:

Calendar cal = Calendar.getInstance();
cal.set(2018, 1, 31, 8, 0, 0);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, 1);
System.out.println(cal.getTime());

28.3.三代目

前面两代日期类的不足分析:
JDK 1.0 中包含了一个java.until.Date类,但是它的大多数方法已经在 JDK 1.1 引入Calendar 类之后被弃用了。
而 Calendar 也存在问题是:

  1. 可变性:像日期和时间这样的类应该是不变的
  2. 偏移性:Date 中的年份是从 1970 开始的,而月份都从0开始
  3. 格式化:格式化只对Date有用,Calendar 则不行
  4. 线程不安全
1. LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒)JDK8加入

LocalDate:只包含日期,可以获取日期字段
LocalTime:只包含时间,可以获取时间字段
LocalDateTime:包含日期+时间,可以获取日期和时间字段

//使用 now() 返回表示当前日期时间的 对象
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
System.out.println("年:" + ldt.getYear());
System.out.println("月:" + ldt.getMonth());
System.out.println("月:" + ldt.getMonthValue());
System.out.println("日:" + ldt.getDayOfMonth());
System.out.println("时:" + ldt.getHour());
System.out.println("分:" + ldt.getMinute());
System.out.println("秒:" + ldt.getSecond());

2. DateTimeFormatter 格式日期类

类似于 SimpleDateFormat

LocalDateTime ldt = LocalDateTime.now();

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a");
String format = dateTimeFormatter.format(ldt);
System.out.println(format);

3.Instant 时间戳

类似于Date,提供了一系列和Date类转换的方式

//通过静态方法 now() 获取表示当前时间戳的对象
Instant now = Instant.now();
//通过 from 可以把 Instant 转成 Date
Date date = Date.from(now);
//通过 Date 的 toInstant() 可以把 date 转成Instant对象
Instant instant = date.toInstant();
5. 常用方法

提供 plus() 和 minus() 方法可以对当前时间进行加或者减

LocalDateTime ldt = LocalDateTime.now();

//890天后时间
LocalDateTime localDateTime = ldt.plusDays(890);

//3456分钟前时间
LocalDateTime localDateTime1 = ldt.minusMinutes(3456);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号