时间相关

2020/10/1 tag1

# 时间相关

@JsonFormat主要是后台到前台的时间格式的转换 @DateTimeFormat主要是前端到后台的时间格式的转换

# LocalDateTime 与 String 相互转换

	 DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
	 LocalDateTime time = LocalDateTime.now();
	 
	 String localTime = df.format(time);
	 System.out.println("LocalDateTime转成String类型的时间:"+localTime);
	 
	 LocalDateTime ldt = LocalDateTime.parse("2018-01-12 17:07:05",df);
	 System.out.println("String类型的时间转成LocalDateTime:"+ldt);

# Date 与 String 相互转换

	DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
	Date date = format.parse("2018-01-12 17:07:05");
	System.out.println("String类型的时间转成Date:"+date);
	
	SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
	String s = sdf.format(date)
	System.out.println("Date类型的时间转成String:"+s);

# Date 与 LocalDateTime 相互转换

LocalDateTime time = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = time.atZone(zoneId);
Date date = Date.from(zdt.toInstant());

Instant instantFromDate = date.toInstant();
ZoneId systemZone = ZoneId.systemDefault();
LocalDateTime time = instantFromDate.atZone(systemZone).toLocalDateTime();

# 两个时间相差的天数

	Duration durationD = Duration.between(startTime, endTime);
	long days = durationD.toDays();

# 从1970-01-01 00:00:00到当前时间的毫秒数

System.currentTimeMillis();

LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();

# 获取两个日期相差的年、天、小时、分钟、秒数

    /**
     * 获取两个日期相差的年、天、小时、分钟、秒数
     * diffType相差的时间类型数
     */
    public static BigDecimal getDateTimeDiff(LocalDateTime beginTime, LocalDateTime endTime, String diffType) {

        //获取第一个时间点的时间戳对应的秒数
        long beginTimeMillis = beginTime.toEpochSecond(ZoneOffset.ofHours(0));
        BigDecimal begin = new BigDecimal(beginTimeMillis);

        //获取第二个时间点的时间戳对应的秒数
        long endTimeMillis = endTime.toEpochSecond(ZoneOffset.ofHours(0));
        BigDecimal end = new BigDecimal(endTimeMillis);

        //获取第一个时间点在是1970年1月1日后的第几天
        BigDecimal t1;

        //获取第二个时间点在是1970年1月1日后的第几天
        BigDecimal t2;

        BigDecimal temp ;
        switch (diffType) {
            case "YEAR": {
                temp = new BigDecimal(60 * 60 * 24 * 365);
                break;
            }
            case "DAY": {
                temp = new BigDecimal(60 * 60 * 24);
                break;
            }
            case "HOUR": {
                temp = new BigDecimal(60 * 60);
                break;
            }
            case "MINUTE": {
                temp = new BigDecimal(60);
                break;
            }
            case "SECOND": {
                temp = BigDecimal.ONE;
                break;
            }
            default:
                temp = BigDecimal.ONE;
                break;
        }
        t1 = begin.divide(temp, MathContext.DECIMAL128);
        t2 = end.divide(temp,MathContext.DECIMAL128);
        //返回两个时间点的差值
        return t2.subtract(t1);
    }

# 获取两个时间点的中间时刻

    /**
     * 获取两个时间点的中间时刻
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    public static LocalDateTime getMiddleTime(LocalDateTime beginTime, LocalDateTime endTime) {

        Long milliSecond = (endTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() + beginTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()) / 2;
        Instant instant = Instant.ofEpochMilli(milliSecond);
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }
Last Updated: 5/5/2024