Java处理字符数组转换为开始日期和结束日期

在Java中处理字符数组表示的TransactionTime(例如["2025-06-01","2025-06-10"]),将其转换为开始时间和结束时间,推荐使用Java 8+的java.time API(如LocalDate)。以下是完整代码示例:

解决方案代码

java

复制

下载

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;public class TransactionTimeParser {public static void main(String[] args) {// 示例输入数据String[] transactionTime = {"2025-06-01", "2025-06-10"};try {// 1. 解析开始时间LocalDate startDate = parseDate(transactionTime[0]);// 2. 解析结束时间LocalDate endDate = parseDate(transactionTime[1]);// 3. 输出结果(或进行后续业务操作)System.out.println("开始时间: " + startDate);System.out.println("结束时间: " + endDate);// 示例:计算时间跨度long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(startDate, endDate);System.out.println("时间跨度: " + daysBetween + " 天");} catch (DateTimeParseException e) {System.err.println("日期格式错误: " + e.getMessage());} catch (ArrayIndexOutOfBoundsException e) {System.err.println("数组长度不足: 需要2个日期元素");}}private static LocalDate parseDate(String dateStr) throws DateTimeParseException {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");return LocalDate.parse(dateStr, formatter);}
}

关键步骤解析:

  1. 数据验证

    • 确保数组长度至少为2(避免ArrayIndexOutOfBoundsException)。

    • 检查日期格式是否符合yyyy-MM-dd(如2025-06-01)。

  2. 日期解析

    • 使用DateTimeFormatter定义格式("yyyy-MM-dd")。

    • 通过LocalDate.parse()将字符串转换为LocalDate对象。

  3. 异常处理

    • DateTimeParseException:日期格式无效时抛出(如2025/06/01)。

    • ArrayIndexOutOfBoundsException:数组元素不足时抛出。

  4. 后续操作

    • 可直接使用LocalDate对象进行日期计算(如计算时间跨度、日期比较等)。

执行结果:

text

复制

下载

开始时间: 2025-06-01
结束时间: 2025-06-10
时间跨度: 9 天

注意事项:

  1. 时区问题
    LocalDate不包含时区信息,如需时区支持请改用ZonedDateTime

  2. 空值检查
    实际业务中应增加对transactionTimenull或空数组的判断。

  3. 日期逻辑
    如果结束时间早于开始时间,需根据业务需求处理(如抛出异常或交换值)。

推荐使用LocalDate的优势:

  • 不可变且线程安全

  • 提供丰富的日期计算方法(如plusDays()isBefore()等)

  • 避免遗留DateCalendar类的设计缺陷

转换为 LocalDateTime

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;public class TransactionTimeParser {public static void main(String[] args) {// 示例输入数据String[] transactionTime = {"2025-06-01", "2025-06-10"};try {// 1. 解析开始时间(转换为当天的00:00:00)LocalDateTime startDateTime = parseStartDateTime(transactionTime[0]);// 2. 解析结束时间(转换为当天的23:59:59.999999999)LocalDateTime endDateTime = parseEndDateTime(transactionTime[1]);// 3. 输出结果System.out.println("开始时间: " + startDateTime);System.out.println("结束时间: " + endDateTime);// 示例:计算时间跨度(以天为单位)long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(startDateTime.toLocalDate(), endDateTime.toLocalDate());System.out.println("时间跨度: " + daysBetween + " 天");} catch (DateTimeParseException e) {System.err.println("日期格式错误: " + e.getMessage());} catch (ArrayIndexOutOfBoundsException e) {System.err.println("数组长度不足: 需要2个日期元素");}}// 解析为开始时间(当天的00:00:00)private static LocalDateTime parseStartDateTime(String dateStr) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate date = LocalDate.parse(dateStr, formatter);return date.atStartOfDay(); // 转换为当天的开始时间}// 解析为结束时间(当天的最后一刻)private static LocalDateTime parseEndDateTime(String dateStr) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate date = LocalDate.parse(dateStr, formatter);return date.atTime(LocalTime.MAX); // 23:59:59.999999999}
}

 

    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}// 处理字符日期数组,数据格式为:["2025-06-01","2025-06-10"],需处理为 LocalDateTime 格式的开始时间和结束时间// 日期格式器DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");// 1. 解析开始时间String beginDateStr = null;LocalDateTime beginDateTime = null;if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {beginDateStr = queryDTO.getTransactionTime().get(0);}if (beginDateStr != null && !beginDateStr.isEmpty()) {// 字符串 转 日期LocalDate startDate = LocalDate.parse(beginDateStr, formatter);// 日期 转 日期时间(当天的 00:00:00)beginDateTime = startDate.atStartOfDay();}queryDTO.setTransactionTimeBegin(beginDateTime);// 2. 解析结束时间String endDateStr = null;LocalDateTime endDateTime = null;if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {endDateStr = queryDTO.getTransactionTime().get(1);}if (endDateStr != null && !endDateStr.isEmpty()) {// 字符串 转 日期LocalDate endDate = LocalDate.parse(endDateStr, formatter);// 日期 转 日期时间(当天的 23:59:59.999999999)endDateTime = endDate.atTime(LocalTime.MAX);}queryDTO.setTransactionTimeEnd(endDateTime);// 检查日期逻辑关系if (beginDateTime != null && beginDateTime.isAfter(endDateTime)) {throw new IllegalArgumentException("开始时间不能晚于结束时间!");}return branchWarehouseMapper.selectForReagent(queryDTO);}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】Poetry虚拟环境创建示例

#工作记录 【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境-CSDN博客 在PowerShell中&#xff1a; Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improv…

20242817李臻-安全文件传输系统-项目验收

安全文件传输系统项目报告 项目概述 本实验旨在设计并实现一个完整的安全文件管理系统&#xff0c;基于SM2SM3SM4混合密码体系&#xff0c;构建了一个具备高安全性的C/S架构文件传输平台。项目采用C/S架构&#xff0c;使用Qt框架开发&#xff0c;满足Linux系统调用、Socket网…

2025年- H76-Lc184--55.跳跃游戏(贪心)--Java版

1.题目描述 2.思路 只要是在最大覆盖范围覆盖了&#xff0c;就是覆盖了。 局部最优&#xff1a;每遍历一个元素取它最大的覆盖范围 全局最优&#xff1a;在这个序列里&#xff0c;可以得到最大的覆盖范围。如果覆盖范围能达到最后一个元素&#xff0c;就是全局最优 &#xff0…

05.查询表

查询表 字段显示可以使用别名: col1 AS alias1, col2 AS alias2, … WHERE子句:指明过滤条件以实现“选择"的功能: 过滤条件: 布尔型表达式算术操作符:,-,*,/,%比较操作符:,<>(相等或都为空),<>,!(非标准SQL),>,>,<,<范围查询: BETWEEN min_num …

Python学习——数组的行列互换

数组的行列互换 data [ [col for col in range (4)] for row in range (4)] for row in data: print (row) print(“--------------”) for r_index,row in enumerate(data): for c_index in range (r_index,len(row)): tmp data [c_index] [r_index] data[c_index] [r_index…

bugku 应急加固1

Linux的应急加固 一、JS劫持 获取JS劫持域名 JS劫持&#xff0c;JavaScript Hijacking介绍&#xff1a; 攻击者通过某种方式篡改网页中的JavaScript代码&#xff0c;从而使网页跳转到恶意域名。 常见攻击方式有&#xff1a; 中间人攻击&#xff0c;在网络传输过程中拦截并修…

ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示

目录 一、问题 二、解决方法 三、总结 一、问题 1.代码里有一个基于ant封装的公共组件数字输入框&#xff0c;测试突然说 无效了&#xff0c;输入其他字符也会显示&#xff1b;改了只有又发现某些 输入法 需要连续输入两次 才能显示出来。 二、解决方法 1.就离谱&#xff0…

郑州工程技术学院赴埃文科技开展访企拓岗促就业活动

6 月 3 日&#xff0c;郑州工程技术学院信息工程学院&软件学院党总支书记尚德基、校企合作处处长吴博、软件学院院长叶恺、信息工程学院院长马耀锋、副院长黄继海、河南省人工智能产业创新发展联盟执行秘书长孟松涛等领导一行到访郑州埃文科技有限公司。埃文科技总经理助理…

pandas 字符串存储技术演进:从 object 到 PyArrow 的十年历程

文章目录 1. 引言2. 阶段1&#xff1a;原始时代&#xff08;pandas 1.0前&#xff09;3. 阶段2&#xff1a;Python-backed StringDtype&#xff08;pandas 1.0 - 1.3&#xff09;4. 阶段3&#xff1a;PyArrow初次尝试&#xff08;pandas 1.3 - 2.1&#xff09;5. 阶段4&#xf…

[特殊字符] 在 React Native 项目中封装 App Icon 一键设置命令(支持参数与默认路径)

📦 前置依赖 使用的是社区维护的 CLI 工具: @bam.tech/react-native-make它扩展了 react-native 命令,支持 set-icon 功能。 安装: yarn add -D "@bam.tech/react-native-make"🧠 封装目标 我们希望能够通过以下方式调用: # 默认使用 ./icon.png yarn …

[论文阅读] 人工智能 | 搜索增强LLMs的用户偏好与性能分析

【论文解读】Search Arena&#xff1a;搜索增强LLMs的用户偏好与性能分析 论文信息 作者: Mihran Miroyan, Tsung-Han Wu, Logan King等 标题: Search Arena: Analyzing Search-Augmented LLMs 来源: arXiv preprint arXiv:2506.05334v1, 2025 一、研究背景&#xff1a;…

[2025CVPR]确定性图像转换新突破:双逼近器布朗桥模型(Dual-approx Bridge)技术详解

本文深入解析CVPR 2024顶会论文《Deterministic Image-to-Image Translation via Denoising Brownian Bridge Models with Dual Approximators》,揭示确定性图像转换的核心突破 一、问题背景:确定性图像转换的挑战 在图像转换任务中(如超分辨率、医学影像处理),​确定性…

Python Pytest

1.Pytest用例发现规则 1.1 模块名(python文件)名必须以 test_ 开头或 _test 结尾&#xff0c;如 test_case&#xff0c;case_test&#xff0c;下划线都不能少 1.2 模块不能放在 . 开头的隐藏目录或者叫 venv的目录下&#xff0c;virtual environment&#xff0c;叫venv1都可以…

CSRF(跨站请求伪造)详解

目录 一、&#x1f4d6;什么是CSRF 二、&#x1f517;漏洞利用过程 三、&#x1f4d1;漏洞的前提条件 四、&#x1f50d;常见漏洞发生位置 五、✅CSRF挖掘技巧 (一) 抓正常请求包进行初步判断 (二) Referer 绕过验证测试 (三) Token 缺失与二次验证缺失识别 六、⚠️漏…

深入解析 Qwen3-Embedding 的模型融合技术:球面线性插值(Slerp)的应用

在深度学习领域&#xff0c;模型融合技术是一种强大的工具&#xff0c;用于提升模型的鲁棒性和泛化能力。通过结合多个模型的优势&#xff0c;可以减少单一模型的过拟合风险&#xff0c;并在多种任务中实现更优的性能表现。在 Qwen3-Embedding 的训练过程中&#xff0c;模型融合…

【在线五子棋对战】二、websocket 服务器搭建

文章目录 Ⅰ. WebSocket1、简介2、特点3、原理解析4、报文格式 Ⅱ. WebSocketpp1、认识2、常用接口3、websocketpp库搭建服务器搭建流程主体框架填充回调函数细节 4、编写 makefile 文件5、websocket客户端 Ⅰ. WebSocket 1、简介 WebSocket 是从 HTML5 开始支持的一种网页端…

针对异构数据的联邦学习

在联邦学习中&#xff0c;数据异构性是指不同客户端之间的数据分布差异&#xff0c;包括数据的特征空间、标签空间以及数据量等方面的差异。处理异构数据是联邦学习中的一个重要挑战&#xff0c;因为异构数据可能导致模型训练过程中的性能不稳定、收敛速度较慢&#xff0c;甚至…

【判断自整除数】2022-4-6

缘由是判断自整除数的&#xff0c;这个我的结果是正确的&#xff0c;但是提交就有运行错误是怎么回事啊-编程语言-CSDN问答 void 自整除数字() {//所谓的自整除数字就是该数字可以整除其每一个位上的数字。 //对一个整数n,如果其各个位数的数字相加得到的数m能整除n,则称n为自…

@Import原理与实战

文章目录 前言一、导入普通类二、导入ImportSelector实现类三、导入ImportBeanDefinitionRegistrar实现类四、Import注解的解析4.1、解析实现ImportSelector的候选bean4.2、解析实现ImportBeanDefinitionRegistrar的候选bean4.3、DeferredImportSelector的特殊处理 总结 前言 I…

day 18进行聚类,进而推断出每个簇的实际含义

浙大疏锦行 对聚类的结果根据具体的特征进行解释&#xff0c;进而推断出每个簇的实际含义 两种思路&#xff1a; 你最开始聚类的时候&#xff0c;就选择了你想最后用来确定簇含义的特征&#xff0c; 最开始用全部特征来聚类&#xff0c;把其余特征作为 x&#xff0c;聚类得到…