首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 日期時間處理:提取年份、月份、日期的正確姿勢

     編輯:程式設計疑難解答

問題描述

從數據庫或前端獲取日期對象,需只保留年份,或單獨提取月、日,不知如何高效處理。

現代方案:Java 8+ java.time API(推薦)

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

LocalDate date = LocalDate.now(); // 或 LocalDate.parse("2023-05-20")
int year = date.getYear();        // 2023
int month = date.getMonthValue(); // 5
int day = date.getDayOfMonth();   // 20

// 只輸出年份字符串
String yearStr = date.format(DateTimeFormatter.ofPattern("yyyy")); // "2023"

// 從 LocalDateTime
LocalDateTime ldt = LocalDateTime.now();
int year2 = ldt.getYear();

舊版方案:Calendar / SimpleDateFormat(維護項目用)

import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Date;

Date date = new Date(); // 或從數據庫獲取
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 月份 0-11
int day = cal.get(Calendar.DAY_OF_MONTH);

// 格式化輸出年份
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String yearStr = sdf.format(date);

數據庫層面處理(最高效)

若只需年份,直接在 SQL 中提取,減少應用層計算:

  • MySQL: SELECT YEAR(create_time) AS yr FROM table
  • Oracle: SELECT EXTRACT(YEAR FROM create_time) FROM table
  • SQL Server: SELECT YEAR(create_time) FROM table
  • PostgreSQL: SELECT EXTRACT(YEAR FROM create_time) FROM table

最佳實踐建議

  1. 新項目強制使用 java.time 包,線程安全、API 清晰。
  2. 避免手動字符串截取(如 `substring`),極易因格式變化出錯。
  3. 傳輸層統一用 ISO-8601 格式(`yyyy-MM-dd` / `yyyy-MM-ddTHH:mm:ss`)。
  4. 數據庫查詢能解決的,盡量下推到 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved