化身天使的博客

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 allZoneIds = ZoneId.getAvailableZoneIds();
// [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之前

posted @ 2024-01-25 19:27  化身天使  阅读(31)  评论(0)    收藏  举报