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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86309.shtml
英文地址,請注明出處:http://en.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;聚類得到…