Java 用正则表达式解析日期通配符

定时作业的执行时间配置在数据库里,比如“****-**-05 05:00:00”表示每个月的五日凌晨五点,"****-**** 03:00:00" 表示为每日的凌晨3点执行。

即根据系统的时间,解析两种格式 :1.每个月特定的一天 2.每天特定的时间

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PlanTimeParser {

    // 定义两种日期格式的正则表达式
    private static final String MONTHLY_PATTERN = "\\*{4}-\\*{2}-(\\d{2}) (\\d{2}:\\d{2}:\\d{2})"; // 每月某日
    private static final String DAILY_PATTERN = "\\*{4}-\\*{2}-\\*{2} (\\d{2}:\\d{2}:\\d{2})"; // 每天的时间

    public static void main(String[] args) {
        String planTime1 = "****-**-05 05:00:00"; // 每月5日 05:00:00
        String planTime2 = "****-**-** 03:00:00"; // 每天03:00:00

        try {
            // 根据系统时间解析模板日期
            System.out.println("解析后的每月时间为: " + parsePlanTime(planTime1));
            System.out.println("解析后的每天时间为: " + parsePlanTime(planTime2));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static Date parsePlanTime(String planTime) throws ParseException {
        Calendar calendar = Calendar.getInstance(); // 获取当前系统时间
        Matcher matcher;

        // 检查每月某日格式
        if ((matcher = Pattern.compile(MONTHLY_PATTERN).matcher(planTime)).matches()) {
            int dayOfMonth = Integer.parseInt(matcher.group(1)); // 提取出每月的某一天
            setTime(calendar, matcher.group(2)); // 设置时间

            // 如果当前日期已经超过设定的日子,跳到下个月
            if (dayOfMonth <= calendar.get(Calendar.DAY_OF_MONTH)) {
                calendar.add(Calendar.MONTH, 1);
            }
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); // 设置为当前或下个月的目标日
        } 
        // 检查每天的时间格式
        else if ((matcher = Pattern.compile(DAILY_PATTERN).matcher(planTime)).matches()) {
            setTime(calendar, matcher.group(1)); // 忽略日期部分,直接使用当前系统日期并设置时间
        } 
        // 如果格式不匹配,抛出异常
        else {
            throw new ParseException("无法解析的 planTime 格式: " + planTime, 0);
        }

        return calendar.getTime(); // 返回解析后的时间
    }

    // 设置时间部分(小时、分钟、秒)
    private static void setTime(Calendar calendar, String time) throws ParseException {
        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
        Date parsedTime = timeFormat.parse(time); // 解析时间部分
        Calendar tempCalendar = Calendar.getInstance();
        tempCalendar.setTime(parsedTime);

        calendar.set(Calendar.HOUR_OF_DAY, tempCalendar.get(Calendar.HOUR_OF_DAY)); // 设置小时
        calendar.set(Calendar.MINUTE, tempCalendar.get(Calendar.MINUTE)); // 设置分钟
        calendar.set(Calendar.SECOND, tempCalendar.get(Calendar.SECOND)); // 设置秒
        calendar.set(Calendar.MILLISECOND, 0); // 毫秒归零
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为云容器引擎(CCE):赋能企业云原生转型

在当今数字化时代&#xff0c;企业面临着日益复杂的应用部署和管理挑战。为了解决这些问题&#xff0c;容器技术应运而生&#xff0c;成为云原生架构的核心。华为云容器引擎&#xff08;CCE&#xff09;作为一款全面的容器管理解决方案&#xff0c;旨在帮助企业实现高效、灵活的…

Redis 安装部署与常用命令

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3关系型数据库和非关系型数据库区别 &#xff08;1&#xff09;数据存储方式不同 &#xff08;2&#xff09;扩展方式不同 &#xff08;3&#xff09;对事务性的支持不同 1.4 非关系型数据…

腾讯推出ima.copilot智能工作台产品 由混元大模型提供技术支持

腾讯公司近期推出了一款名为ima.copilot&#xff08;简称ima&#xff09;的智能工作台产品&#xff0c;它由腾讯混元大模型提供技术支持。这款产品旨在通过其会思考的知识库&#xff0c;为用户开启搜读写的新体验。ima.copilot的核心功能包括知识获取、打造专属知识库以及智能写…

【算法】递归系列:递归初介绍,练习:231.2 的幂、

目录 一、理解递归 1、什么是递归&#xff1f; 2、为什么会使用递归&#xff1f; 3、递归使用的场景&#xff1f; 4、那么如何写出递归解法&#xff1f; 二、实践 231. 2的幂 1.函数头的设计 2.只关心某一个子问题是如何解决的 ->函数体的书写 3.注意一下递归函数的出…

个人品牌塑造与商业增长的加速器:开源AI智能名片2+1链动模式S2B2C商城小程序源码的应用研究

摘要&#xff1a;本文旨在深入探讨个人品牌塑造与商业增长过程中的核心要素&#xff0c;特别是“开源AI智能名片21链动模式S2B2C商城小程序源码”在提升品牌影响力、吸引潜在客户、促进团队协作及推动商业增长方面的具体应用与显著成效。通过详细分析一位微商从业者的实际案例&…

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代&#xff0c;寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天&#xff0c;我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发&#xff0c;集合了丰富的旅游信息和个性化推荐功能&…

4种鼓励创业创新的方法

随着市场趋于饱和&#xff0c;许多企业&#xff0c;尤其是初创企业&#xff0c;很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新&#xff0c;从员工到品牌皆如此。 那么究竟如何…

Ajax笔记

介绍 Ajax是一种网页开发技术&#xff0c;全称是Asynchronous JavaScript and XML&#xff08;异步JavaScript和XML&#xff09;。作用如下&#xff1a; 数据交换&#xff1a;可以通过Ajax给服务器发送请求&#xff0c;并获取服务器响应的数据。即前端动态的发送Ajax到服务器端…

秦时明月2搭建笔记

1.具体配置 数据库不修改&#xff0c;如果修改了&#xff0c;gm那边也要 2.数据库 3.上传配置文件出现问题 参考&#xff1a;对于测试时&#xff0c;错误信息 Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large-CSDN博客 4.启动tomcat&#x…

指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路

定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息&#xff0c; 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作&#xff0c; 比如两个股票户ABAB&#xff0c;微观上实际还是有差异GROUP: …

Umi UI报错:连接失败,请尝试重启dev服务

Umi UI连接失败&#xff0c;请尝试重启dev服务 使用umi ui时遇到以下问题 报错如下 从报错可以看出是淘宝镜像失效的问题&#xff0c;检查淘宝镜像 可以看出淘宝镜像是最新的&#xff0c;并无问题 经过查找发现报错是因为依赖文件中使用了旧的淘宝镜像&#xff0c;在node…

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…

开发涉及的安全规范整理

#1024程序员节&#xff5c;征文# 文章目录 前言安全场景与措施API调用方式鉴权参数校验日志打印数据保存加密 总结 前言 这篇文章我们来整理下写代码和方案设计中的安全规范问题&#xff0c;内容偏服务端&#xff0c;即使是入门的新人&#xff0c;如果你对安全有所了解会让成熟…

go语言中的Scanf()输入函数

Scanf() 第一种情况 package mainimport "fmt"func main() {var a intfor {fmt.Println("请输入一个整数:")fmt.Scanf("%d", &a)fmt.Println("----------------", a)} }运行结果&#xff1a; 解释&#xff1a; 出现这种现象是因…

CentOS 8在Linux虚拟机修改IP地址,出现:错误:“ens160“ 不是活动的连接。错误:未提供活动连接。

问题&#xff1a;错误&#xff1a;"ens160" 不是活动的连接。错误&#xff1a;未提供活动连接。 1.查看网络服务运行状态&#xff1a; 1)CentOS 7执行命令&#xff1a;systemctl status network 2)CentOS 8执行命令&#xff1a;systemctl status NetworkManager&a…

双十一有哪些适合学生党的好物?五款学生党必备好物分享

在双十一这个全民狂欢的购物盛宴中&#xff0c;不仅仅是寻找生活的小确幸&#xff0c;更是自我提升与投资的最佳时机。学习&#xff0c;作为个人成长的阶梯&#xff0c;其相关的好物选择显得尤为重要。本文精选了一系列学习、生活神器&#xff0c;旨在为您的学习之旅增添动力与…

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中&#xff0c;我们通过手机可以实现非常多的操作&#xff0c;同时手机中有存在许多我们的隐私信息&#xff0c;伴随使用手机的时间增多&#xff0c;手机中的信息也有可能被暴露&#xff0c;尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…

青少年编程能力等级测评CPA C++(三级)-试卷1

青少年编程能力等级测评CPA C&#xff08;三级&#xff09;-试卷1 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP3_1_1&#xff0e;以下有关模拟算法的叙述中&#xff0c;不正确的是&#xff08; &#xff09;。 A&#xff0e;模拟…

普通数组矩阵

文章目录 普通数组一、最大子数组二、合并区间三、轮转数组四、除自身以外数组的乘积五、缺失的第一个正数 普通数组 一、最大子数组 题目链接 方法一&#xff1a;动态规划 方法二&#xff1a;前缀和&#xff08;有点难理解&#xff09; 二、合并区间 题目链接 三、轮…

软件部署-Docker容器化技术(二)

上一期分享了Docker的一些基本内容&#xff0c;这一期主要对构建基础镜像和Docker网络、文件挂载再展开分享下&#xff0c;可能不一定做得很好&#xff0c;主要是在学习的过程中有一些自己的总结和思考&#xff0c;和大家一起学习。 名词说明&#xff1a;这里的宿主机是指liun…