常用方法
// 基于 org.apache.commons.lang.time.DateUtils
/**
* Get the beginning of the day
* @param date the date to work with
* @return the beginning of the day
*/
public static Date getDayStart(Date date) {
return truncate(date, Calendar.DATE);
}
/**
* Get the beginning of the day
* @param date the date to work with
* @return the beginning of the day
*/
public static Date getDayEnd(Date date) {
return addMilliseconds(ceiling(date, Calendar.DATE), -1);
}
/**
* Gets the number of days between two dates
*
* 使用 java 8 中 LocalDateTime 可以使用
* Duration 获取间隔的: 纳秒,秒
* Duration.between(localDateTime1, localDateTime2).getSeconds()
* Period 获取间隔的:天,月,年
* Period.between(localDate1, localDate2).getDays()
*
* @param date1 the first date, not altered, not null
* @param date2 the second date, not altered, not null
* @return the number of days between two dates
*/
public static long daysBetween(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new IllegalArgumentException("The date must not be null");
}
return Math.abs(date2.getTime() - date1.getTime()) / MILLIS_PER_DAY;
}
Java 8 通用解决 LocalDateTime 转为字符串后中间含 “T”
@Configuration
public class LocalDateTimeConfig {
private static final String LOCAL_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer(){
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(LOCAL_DATE_TIME_FORMAT));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(){
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class,
localDateTimeDeserializer());
}
}
Java 8 中 LocalDateTime 和 Mysql 8 相差 8 小时
数据库连接 url 拼接 serverTimezone
# CTT : shanghai
serverTimezone=CTT
源码:ZoneId.java
static {
Map<String, String> map = new HashMap<>(64);
map.put("ACT", "Australia/Darwin");
map.put("AET", "Australia/Sydney");
map.put("AGT", "America/Argentina/Buenos_Aires");
map.put("ART", "Africa/Cairo");
map.put("AST", "America/Anchorage");
map.put("BET", "America/Sao_Paulo");
map.put("BST", "Asia/Dhaka");
map.put("CAT", "Africa/Harare");
map.put("CNT", "America/St_Johns");
map.put("CST", "America/Chicago");
map.put("CTT", "Asia/Shanghai");
map.put("EAT", "Africa/Addis_Ababa");
map.put("ECT", "Europe/Paris");
map.put("IET", "America/Indiana/Indianapolis");
map.put("IST", "Asia/Kolkata");
map.put("JST", "Asia/Tokyo");
map.put("MIT", "Pacific/Apia");
map.put("NET", "Asia/Yerevan");
map.put("NST", "Pacific/Auckland");
map.put("PLT", "Asia/Karachi");
map.put("PNT", "America/Phoenix");
map.put("PRT", "America/Puerto_Rico");
map.put("PST", "America/Los_Angeles");
map.put("SST", "Pacific/Guadalcanal");
map.put("VST", "Asia/Ho_Chi_Minh");
map.put("EST", "-05:00");
map.put("MST", "-07:00");
map.put("HST", "-10:00");
SHORT_IDS = Collections.unmodifiableMap(map);
}