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

JSP 日期時間處理完整指南

     編輯:JSP 入門

JSP 日期時間處理完整指南

JSP 可直接使用 Java 標準庫 java.util.Date、Calendar 及格式化類別 SimpleDateFormat (舊版) 或 DateTimeFormatter (Java 8+)。本文涵蓋建立、比較、格式化、解析與時區處理。


Date 類別基礎

// 當前時間
Date now = new Date();

// 指定毫秒數 (自 1970-01-01 00:00:00 UTC)
Date specific = new Date(1699999999000L);

// 常用方法
now.getTime()        // 取得毫秒數 (long)
now.before(another)  // 是否早於另一日期
now.after(another)   // 是否晚於另一日期
now.compareTo(another) // 比較: -1/0/1
now.toString()       // 預設格式字串

取得當前日期時間

<%@ page import="java.util.Date" %>
<p>現在時間:<%= new Date() %></p>
<!-- 輸出範例: Mon Nov 13 14:30:45 CST 2023 -->

日期比較三種方式

方式範例適用場景
getTime() 比較毫秒d1.getTime() < d2.getTime()精確比較、排序
before/after/equalsd1.before(d2)語意清晰、可讀性佳
compareTo()d1.compareTo(d2) < 0實作 Comparable 介面、集合排序

SimpleDateFormat 格式化 (Java 7 及之前主流)

常用模式字元

字元意義範例
y年2023 / 23
M月11 / Nov / November
d日13
H時 (0-23)14
h時 (1-12)02
m分30
s秒45
S毫秒123
E星期Mon / 星期一
aAM/PMPM
z時區CST / GMT+08:00

格式化與解析範例

<%@ page import="java.text.SimpleDateFormat, java.util.Date, java.util.Locale" %>
<%
  Date now = new Date();
  
  // 格式化
  SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String formatted = sdf1.format(now);  // 2023-11-13 14:30:45
  
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 E a hh:mm", Locale.TRADITIONAL_CHINESE);
  String chinese = sdf2.format(now);    // 2023年11月13日 星期一 下午 02:30
  
  // 解析
  SimpleDateFormat parser = new SimpleDateFormat("yyyy/MM/dd");
  Date parsed = parser.parse("2023/12/25"); // 不拋出 ParseException 需 try-catch
%>

Java 8+ 新時代 API (java.time) - 強烈建議

Thread-safe、不可變、API 直覺:

<%@ page import="java.time.*, java.time.format.DateTimeFormatter" %>
<%
  // 當前日期時間 (系統預設時區)
  LocalDateTime now = LocalDateTime.now();
  LocalDate today = LocalDate.now();
  LocalTime time = LocalTime.now();
  ZonedDateTime zdt = ZonedDateTime.now(); // 含時區
  
  // 格式化
  DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  String str = now.format(fmt);
  
  // 解析
  LocalDate parsed = LocalDate.parse("2023-12-25", DateTimeFormatter.ISO_LOCAL_DATE);
  
  // 運算
  LocalDate nextWeek = today.plusWeeks(1);
  Period age = Period.between(birthday, today);
  
  // 時區轉換
  ZonedDateTime taipei = ZonedDateTime.now(ZoneId.of("Asia/Taipei"));
  ZonedDateTime utc = taipei.withZoneSameInstant(ZoneOffset.UTC);
%>

JSP 頁面完整範例:顯示多種格式

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.time.*, java.time.format.DateTimeFormatter, java.util.Locale" %>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>日期時間展示</title></head>
<body>
  <h2>Java 8+ 日期時間 API 展示</h2>
  <ul>
    <li>ISO 格式:<%= LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) %></li>
    <li>中文完整:<%= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE a hh:mm:ss", Locale.TRADITIONAL_CHINESE)) %></li>
    <li>Unix 時間戳:<%= Instant.now().getEpochSecond() %></li>
    <li>台北時區:<%= ZonedDateTime.now(ZoneId.of("Asia/Taipei")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z")) %></li>
  </ul>
</body></html>

最佳實踐總結

  1. 新專案請使用 java.time,避免 SimpleDateFormat 非執行緒安全問題。
  2. 資料庫儲存用 UTC (Instant / TIMESTAMP WITH TIME ZONE),顯示時轉換使用者時區。
  3. 格式化器重用**:宣告為 static final 或 ThreadLocal,勿在請求中重複建立。
  4. 國際化**:搭配 Locale 與資源包,支援多語系日期顯示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved