DateUtils :
写代码时最常见的“兄弟”——时间处理工具类DateUtils
首先,我们需要先准备几样“东西”:
// 时区
public static final int DEFAULT_TIME_ZONE = 0;
// 中国时区
public static final int CHINA_TIME_ZONE = 8;
+++++++++划重点:
常见时间格式:
private static final String[] prototypePatterns =
{ "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd HH:mm", "HH:mm:ss.SSS", "yyyy-MM-dd", "dd-MM-yyyy",
"yy-MM-dd", "MM-dd-yyyy", "HH:mm:ss","HH:mm"
};
public static final DateTimeFormatter DATE_TIME_FORMATTER
= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("yyyy-MM-dd");
//东八区上海时区
public static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");
public static Instant[] getDayStartTimeAndEndTime(Instant time) {
//获取北京时间的零点
ZoneId zoneId = CHINA_ZONE_ID;
LocalDateTime localDateTime = LocalDateTime.ofInstant(
time, zoneId);
//获取当天的开始时间
Instant minTime = localDateTime.toLocalDate()
.atStartOfDay(zoneId).toInstant();
//获取当天的结束时间
Instant maxTime = localDateTime.toLocalDate()
.atStartOfDay(zoneId).plusDays(1L).plusSeconds(-1L).toInstant();
return new Instant[]{minTime, maxTime};
}
目录
DateUtils :
获取东8区的某个月的开始时间和结束时间
public static Instant[] getMonthStartTimeAndEndTime(Instant time) {
LocalDateTime LocalBegin = time.atZone(CHINA_ZONE_ID).toLocalDateTime();
Instant minTime = LocalBegin.minusDays(LocalBegin.getDayOfMonth())
.toLocalDate().atStartOfDay(CHINA_ZONE_ID).toInstant();
Instant maxTime = LocalBegin.minusDays(LocalBegin.getDayOfMonth())
.minus(-1, ChronoUnit.MONTHS)
.toLocalDate().atStartOfDay(CHINA_ZONE_ID)
.minus(1L,ChronoUnit.MILLIS).toInstant();
return new Instant[]{minTime, maxTime};
}
判断两个Instant类型的时间,是否为同一天
public static boolean isSameDate(Instant date1, Instant date2) {
ZoneId zoneId = CHINA_ZONE_ID;
LocalDate localDate1 = LocalDateTime.ofInstant(date1, zoneId).toLocalDate();
LocalDate localDate2 = LocalDateTime.ofInstant(date2, zoneId).toLocalDate();
return localDate1.compareTo(localDate2) == 0;
}
接下来就是最刺激的类型互转了:
1、Instant转为(String)类型
public static String toChinaTimeFormat(Instant /confirm/iTime) {
if (confirmTime == null) {
return null;
}
return DATE_TIME_FORMATTER.format(
LocalDateTime.ofInstant(/confirm/iTime, CHINA_ZONE_ID)
);
}
public void test(){
String s = toChinaTimeFormat(Instant.now());
System.out.println(s);
}
输出:2021-08-05 17:17:05
// DATE_TIME_FORMATTER是前面设置的日期格式哦,也可以换别的!
//本来想解释一下ofInstant()源码的,但网上仿佛更全面,有兴趣的同学可以百度
2、LocalDate转为Instant类型
public static Instant localDateToInstant(LocalDate date) {
ZoneId zone = ZoneId.systemDefault();
return date.atStartOfDay().atZone(zone).toInstant();
}
@Test
public void test(){
Instant instant = localDateToInstant(LocalDate.now());
System.out.println(instant);
}
输出结果:2021-08-04T16:00:00Z (采用的是系统默认的时区)
注:LocalDate.now()获取的是当天日期,转还为Instant时,是从当日0点算起的



