13.java时间与本地化
时间
导入包,一般自动的
import java.time.*;
import java.util.Date; //日期
import java.text.DateFormat; //日期格式化抽象类
import java.text.SimpleDateFormat; //日期格式化实现
获取时间
LocalDate 方法
LocalDate date = LocalDate.now();
//日期LocalDate,2023-07-06
LocalTime time = LocalTime.now();
//时间LocalTime,11:29:55.125613500
LocalDateTime dateTime = LocalDateTime.now();
//日期时间LocalDateTime,
//2023-07-06T11:31:00.249307100
ZonedDateTime zonedDateTime = ZonedDateTime.now();
//日期时间时区
//2023-07-06T16:04:17.618742300+08:00[Asia/Shanghai]
Instant instantNow = Instant.now();
//格林尼治日期时间, 2023-07-06T08:02:03.911334900Z
//时区
ZoneId zoneId = ZoneId.systemDefault();
//Asia/Shanghai
//所有时区
Set
// [Asia/Aden, America/Cuiaba
Date 方法
不如上面的好用
import java.util.Date;
Date date = new Date(); // Thu Jul 06 09:15:39 CST 2023
DateFormat ft = new SimpleDateFormat();
ft.format(date) // 2023/5/6 10:32
- 时间戳
date.getTime() //Date类 - 年月日时间秒(整型)
LocalDateTime dateTime=LocalDateTime.now();
.getYear() //2022
.getMonthValue() //6 .getMonth() JULY
.getDayOfMonth() //6
.getHour() //15
.getMinute() //7
.getSecond() //20
.getNano() //纳秒
.getDayOfWeek() // THURSDAY
(4)
转换
时间戳转日期
import java.util.Date;
Date date = new Date(1688606316932L); //实例化时传入long型时间戳
date.setTime(1688606316931L); //实例化后通过方法设置
数字转日期
LocalDate date1=LocalDate.of(2023,6,7);
//转LocalDate,年月[日],
//2023-06-07
LocalTime time1 =LocalTime.of(10, 20, 30);
//LocalTime,时分[秒][纳秒]
//10:20:30
LocalDateTime dateTime1 =LocalDateTime.of(2022,10,23,20,25);
//年月日时分[秒][纳秒] ; LocalDate,LocalTime
//2022-10-23T20:25
字符串转日期
LocalDate date=LocalDate.parse("2023-07-05"); //年月日, - 0 不能省略
LocalTime time=LocalTime.parse("10:23"); //时分[秒]
LocalDateTime dateTime=LocalDateTime.parse("2023-07-02T10:23:27");
这几个方法都有第二个参数,DateTimeFormatter 指定传入的格式,
缺省ISO_LOCAL_TIME, 必须严格按照这种格式
时间转字符串,格式化
① time类型及LocalDate 等类型
LocalDate date=
String s = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
② Date类示例
//声明并定义格式实例
DateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//2023-07-06 10:38:41
DateFormat ft = new SimpleDateFormat();
ft = new SimpleDateFormat("y-M-d HⓂ️s");
//2023-7-6 10:38:41
//格式化指定字符串
ft.format(date1)
③ Date类字符说明
y 年
M 月 //MM 07 M 7
d 日 //dd 07 d 7
H 时 //24小时制, h 12小时制
m 分
s 秒
S 毫秒
Z 时区
D 今天是今年的第几天
a AM/PM
④
计算
(1)加减一段时间,通用方法
LocalDateTime dateTime2 = dateTime.plusDays(2); //加两天
LocalDate date2 = date.plusDays(-2); //传入负数减两天
LocalDate date2 = date.minusDays(-2); //正统的减两天
LocalTime date2 = date.plusHours(-2); //时间类型
LocalDateTime dateT = dateTime.plusDays(2).plusMinutes(20); //链式调用
//定义一段时间
Period mPeriod = Period.of(1, 0, 8); //一年零8天
LocalDateTime d2 = d1.minus(mPeriod); //d1减去这段时间
//方法
.plusWeeks(3) //周加
.minusWeeks() //周减
.plusYears() //年
.plusMonths() //月
.plusDays() //日
.plusHours() //时
.plusMinutes()
.plusNanos()
(2)加减一段时间LocalDateTime可用
LocalDateTime tomorrow = dateTime.plus(Duration.ofDays(1)); //加一天
LocalDateTime yesterda = dateTime.minus(Duration.ofDays(1)); //减一天
(3)两日期相减
d1 : 5号
d2: 6号
Duration d3 = Duration.between(d1, d2);
//PT-24H d1比d2早一天有个负号
d3.toDays();
// -1 整型 这个差值转换为天
(4)
修改
LocalDateTime d2 = dateTime.withDayOfMonth(3); //直接修改日
//使用内置函数
import java.time.temporal.TemporalAdjusters;
LocalDateTime d2 = d1.with(TemporalAdjusters.lastDayOfMonth());
//修改为本月最后一天
.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY))
//从今天算,上一个周日,比如今天周一,就是昨天
.with(TemporalAdjusters.next(DayOfWeek.SUNDAY))
//下一个周日
比较
(1)比较大小
date1.compareTo(date2) //比较两日期对象,date1大返回1,小返回-1,相等返回0
date1.equals(date2) //是否相等
date1.after(date2) //date1是否较晚,在date2之后
date1.before(date2) //date1是否较早,在date2之前

浙公网安备 33010602011771号