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

GWT 客戶端日期格式化:DateTimeFormat 替代 SimpleDateFormat

     編輯:Java 綜合教學

GWT 客戶端日期格式化:DateTimeFormat 替代 SimpleDateFormat

GWT (Google Web Toolkit) 將 Java 代碼編譯為 JavaScript 運行在瀏覽器端。客戶端代碼不能使用 java.text.SimpleDateFormat 等 JRE 類庫,必須使用 GWT 提供的 com.google.gwt.i18n.client.DateTimeFormat 進行日期格式化與解析。

核心 API

import com.google.gwt.i18n.client.DateTimeFormat;

// 獲取格式化器 (線程安全、不可變)
DateTimeFormat sdf = DateTimeFormat.getFormat("yyyy-MM-dd");
DateTimeFormat sdf2 = DateTimeFormat.getFormat("yyyy-MM");
DateTimeFormat sdf3 = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss");

// 格式化 Date → String
Date date = new Date();
String formatted = sdf.format(date); // "2024-01-15"

// 解析 String → Date
Date parsed = sdf.parse("2024-01-15");

實戰代碼片段:統計查詢日期範圍默認值

public class StatsExchangeCoinView extends BaseContentPanel implements StatsExchangeCoinPresenter.Display {
    private DateRangeField dateRangeField; // 自定義日期範圍組件

    private void initToolBar() {
        // ... 其他工具欄組件

        dateRangeField = WidgetCreateUtil.createDateRangeField("start", "end", "選擇日期");

        // 設置默認值:本月 1 日 至 今日
        Date date = new Date();
        DateTimeFormat sdf = DateTimeFormat.getFormat("yyyy-MM-dd");
        DateTimeFormat sdfMonth = DateTimeFormat.getFormat("yyyy-MM");
        String startStr = sdfMonth.format(date) + "-01"; // 如 "2024-01-01"
        String endStr = sdf.format(date);                // 如 "2024-01-15"
        dateRangeField.setValue(new String[]{startStr, endStr});

        getToolBar().add(dateRangeField);
        // ...
    }

    // 參數提交時獲取日期範圍
    protected void parameters(LoadConfig config) {
        if (dateRangeField.getValue() != null 
            && !dateRangeField.getStartTimeString().isEmpty() 
            && !dateRangeField.getEndTimeString().isEmpty()) {
            config.set("startDate", dateRangeField.getStartTimeString());
            config.set("endDate", dateRangeField.getEndTimeString());
        }
    }
}

支持的模式字母 (子集)

字母含義示例
y年yyyy=2024, yy=24
M月MM=01, M=1
d日dd=01, d=1
H時 (0-23)HH=13, H=13
m分mm=05, m=5
s秒ss=09, s=9
S毫秒SSS=123
E星期EEE=Mon, EEEEE=Monday
z時區z=GMT+08:00

注意事項

  1. 僅客戶端代碼 (實現 EntryPoint、UI 組件、RPC 回調) 需用 DateTimeFormat;服務端代碼繼續用 SimpleDateFormat。
  2. 線程安全:DateTimeFormat 實例不可變,可安全作為静態常量複用。
  3. 性能:getFormat 會緩存實例,重複調用無額外開銷。
  4. 時區:客戶端運行在用戶瀏覽器時區,格式化/解析默認使用瀏覽器時區,跨時區業務需顯式處理。
  5. GWT 2.8+ 支持 Java 8 java.time 部分 API (通過 gwt-jre-emul),但 DateTimeFormat 仍為首選。

完整示例參考 (源碼片段)

GWT 日期格式化源碼截圖

// 完整 View 類代碼見原文,包含 Grid、PagingToolBar、ColumnConfig 等 GXT 組件用法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved