首页 > 编程语言 >java时间处理

java时间处理

时间:2023-07-15 17:44:49浏览次数:38  
标签:java 处理 static 时间 LocalDateTime Date return Calendar public

LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime minTime = localDateTime.with(LocalTime.MIN);
        LocalDateTime maxTime = localDateTime.with(LocalTime.MAX);
        Set<String> times = DateUtils.getTimes(Date.from(minTime.atZone(ZoneId.systemDefault()).toInstant()), Date.from(maxTime.atZone(ZoneId.systemDefault()).toInstant()));
package com.zygh.traffic.common.utils.date;

import cn.hutool.core.date.LocalDateTimeUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.*;

/**
 * 时间工具类
 *
 * @author 芋道源码
 */
public class DateUtils {

    /**
     * 时区 - 默认
     */
    public static final String TIME_ZONE_DEFAULT = "GMT+8";

    /**
     * 秒转换成毫秒
     */
    public static final long SECOND_MILLIS = 1000;

    public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";

    public static final String FORMAT_HOUR_MINUTE_SECOND = "HH:mm:ss";

    /**
     * 将 LocalDateTime 转换成 Date
     *
     * @param date LocalDateTime
     * @return LocalDateTime
     */
    public static Date of(LocalDateTime date) {
        // 将此日期时间与时区相结合以创建 ZonedDateTime
        ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());
        // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳
        Instant instant = zonedDateTime.toInstant();
        // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
        return Date.from(instant);
    }

    /**
     * 将 Date 转换成 LocalDateTime
     *
     * @param date Date
     * @return LocalDateTime
     */
    public static LocalDateTime of(Date date) {
        // 转为时间戳
        Instant instant = date.toInstant();
        // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }

    @Deprecated
    public static Date addTime(Duration duration) {
        return new Date(System.currentTimeMillis() + duration.toMillis());
    }

    public static boolean isExpired(Date time) {
        return System.currentTimeMillis() > time.getTime();
    }

    public static boolean isExpired(LocalDateTime time) {
        LocalDateTime now = LocalDateTime.now();
        return now.isAfter(time);
    }

    public static long diff(Date endTime, Date startTime) {
        return endTime.getTime() - startTime.getTime();
    }

    /**
     * 创建指定时间
     *
     * @param year  年
     * @param mouth 月
     * @param day   日
     * @return 指定时间
     */
    public static Date buildTime(int year, int mouth, int day) {
        return buildTime(year, mouth, day, 0, 0, 0);
    }

    /**
     * 创建指定时间
     *
     * @param year   年
     * @param mouth  月
     * @param day    日
     * @param hour   小时
     * @param minute 分钟
     * @param second 秒
     * @return 指定时间
     */
    public static Date buildTime(int year, int mouth, int day,
                                 int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, mouth - 1);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒
        return calendar.getTime();
    }

    public static Date max(Date a, Date b) {
        if (a == null) {
            return b;
        }
        if (b == null) {
            return a;
        }
        return a.compareTo(b) > 0 ? a : b;
    }

    public static LocalDateTime max(LocalDateTime a, LocalDateTime b) {
        if (a == null) {
            return b;
        }
        if (b == null) {
            return a;
        }
        return a.isAfter(b) ? a : b;
    }

    /**
     * 计算当期时间相差的日期
     *
     * @param field  日历字段.<br/>eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,<br/>Calendar.HOUR_OF_DAY等.
     * @param amount 相差的数值
     * @return 计算后的日志
     */
    public static Date addDate(int field, int amount) {
        return addDate(null, field, amount);
    }

    /**
     * 计算当期时间相差的日期
     *
     * @param date   设置时间
     * @param field  日历字段 例如说,{@link Calendar#DAY_OF_MONTH} 等
     * @param amount 相差的数值
     * @return 计算后的日志
     */
    public static Date addDate(Date date, int field, int amount) {
        if (amount == 0) {
            return date;
        }
        Calendar c = Calendar.getInstance();
        if (date != null) {
            c.setTime(date);
        }
        c.add(field, amount);
        return c.getTime();
    }

    /**
     * 是否今天
     *
     * @param date 日期
     * @return 是否
     */
    public static boolean isToday(LocalDateTime date) {
        return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now());
    }

    /**
     * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中
     * @param beginTime
     * @param endTime
     * @return
     * @throws ParseException
     */
    public static List<String> findEveryDay(String beginTime, String endTime)
            throws ParseException {
        //1.创建一个放所有日期的集合
        List<String> dates = new ArrayList();
        //2.创建时间解析对象规定解析格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        //3.将传入的时间解析成Date类型,相当于格式化
        Date dBegin = sdf.parse(beginTime);
        Date dEnd = sdf.parse(endTime);
        //4.将格式化后的第一天添加进集合
        dates.add(sdf.format(dBegin));
        //5.使用本地的时区和区域获取日历
        Calendar calBegin = Calendar.getInstance();
        //6.传入起始时间将此日历设置为起始日历
        calBegin.setTime(dBegin);
        //8.判断结束日期是否在起始日历的日期之后
        while (dEnd.after(calBegin.getTime())) {
            // 9.根据日历的规则:月份中的每一天,为起始日历加一天
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            //10.得到的每一天就添加进集合
            dates.add(sdf.format(calBegin.getTime()));
            //11.如果当前的起始日历超过结束日期后,就结束循环
        }
        return dates;
    }

    /**
     * 获取一段时间范围内所有时分时间,[01:00, 02:00, 03:00, ...]
     */
    public static Set<String> getTimes(Date fromDate, Date toDate) {

        Set<String> times = new HashSet<>();
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "HH:mm");
        List<Date> hourlyInterval = getHourlyInterval(fromDate, toDate);
        for (Date date : hourlyInterval) {
            times.add(dateFormat.format(date));
        }
        return times;
    }

    private static List<Date> getHourlyInterval(Date fromDate, Date toDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(fromDate);
        List<Date> hourlyInterval = new ArrayList<>();
        hourlyInterval.add(calendar.getTime());
        while (calendar.getTime().before(toDate)) {
            calendar.add(Calendar.HOUR_OF_DAY, 1);
            hourlyInterval.add(calendar.getTime());
        }
        return hourlyInterval;
    }


}

 

标签:java,处理,static,时间,LocalDateTime,Date,return,Calendar,public
From: https://www.cnblogs.com/liubaihui/p/17556577.html

相关文章

  • Java基础1
    Java基础1whitchbreak,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构switch结构中的表达式,只能是如下的6种数据类型之一:byte.short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)case之后只能声明常量。不能声明范围。break关......
  • Java标识符和关键字
    Java标识符和关键字标识符Java所有的组成部分都需要名字类名.变量名以及方法名都被称为标识符注意点:所有的标识符都应该以(AZ或者az),美元符($),或者下划线开始首字符之后可以是字母(AZ或者az),美元符($),下划线(_)或数字的任何字符组合不能使用关键字作为变量名或......
  • mysqld.log日志文件输出的时间不对
    在本机新安装MySQL8后,查看mysql.log日志发现输出的日志有点不对劲,如下图所以:差不多相差了8个小时,但是我们查看数据库的时间的时候又是正常的,如下图所示:通过翻看MySQL官方文档后发现,新增了一个参数log_timestamps来设置错误日志输出的时区,如下图所示这个变量默认值是UTC,我们......
  • 从头学Java17-今天的Kotlin更香吗
    出于各种限制,很多公司依然停留在Java8,部分小伙伴转向了Kotlin。Kotlin作为静态编译语言,提供大量语法糖,而且编译后的字节码跟Java一致。当时,Java8于2014年发布,Kotlin于2016年,很多宣称的语法糖都是对比的Java8。不禁要问,相对今天的Java17,Kotlin优势还在吗?现在就用最新的Kotlin1.9......
  • Java的注释
    Java的注释单行注释可以注释一行文字//多行注释可以注释一段文字/*注释*/JavaDoc:文档注释/***/......
  • 一段时间刷新数据
    ···<script>exportdefault{data(){return{//刷新间隔stepNum:100,//设置定时器开关interval:null}},//之前在大的主组件中使用了keep-alive缓存activated(){if(this.interval===null){.........
  • mysql 预约时间 开始时间 结束时间 查询
    MySQL预约时间查询在许多应用程序中,我们需要管理预约时间。比如,医院预约系统、会议室预约系统等。MySQL是一个流行的关系型数据库管理系统,我们可以使用它来存储和查询预约时间数据。本文将介绍如何使用MySQL进行预约时间的查询操作,并提供相应的代码示例。数据库设计首先,我们需......
  • Java环境搭建
    Java环境搭建卸载JDK删除java的安装目录删除JAVA_HOME删除path下关于java的目录Win+R:输入cmd,运行java-version,查看运行结果安装JDK百度搜索JDK8,找到下载地址同意协议下载电脑对应的版本双击安装JDK记住安装的路径配置环境变量我的电脑->右键->......
  • 利用java实现图片表格检测与结构识别
    GuideOverviewRequirementsDemoModulesOverviewThisjavapackagecontainsmodulestohelpwithfindingandextractingtabulardatafromaPDForimageintoaCSVformat.Givenanimagethatcontainsatable…ExtractthethetextintoaCSVform......
  • Java流程控制
    Java流程控制Scanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通......