You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GWT应用时间处理问题:获取GMT与本地时差及带偏移显示

GWT时区处理与时间格式化解决方案

嘿,我来帮你搞定这两个GWT时区相关的问题,一步一步来:

1. 获取GMT与本地时区的时差

在GWT里,我们可以借助TimeZone和DateTimeFormat类轻松拿到本地时区与GMT的偏移量:

  • 首先获取当前用户的本地时区:TimeZone localTz = DateTimeFormat.getCurrentTimeZone();
  • 计算该时区相对于GMT的偏移(单位是毫秒):int offsetMs = localTz.getOffset(new Date());
  • 把毫秒转换为更易读的小时和分钟:
    int totalOffsetMinutes = offsetMs / (1000 * 60);
    int offsetHours = totalOffsetMinutes / 60;
    int offsetMinutes = Math.abs(totalOffsetMinutes % 60);
    
    比如本地时区比GMT快2小时,offsetHours就是+2,如果慢5小时就是-5。

2. 实现需求的时间格式化逻辑

你提供的代码片段没写完,我帮你补全并调整,让输出完全符合17/4/2018 10:00 +GMT 02:00的格式:

完整格式化代码

import java.util.Date;
import com.google.gwt.i18n.client.TimeZone;
import com.google.gwt.i18n.client.DateTimeFormat;

public class DateTimeFormatter {
    private static final String NONE = "N/A";
    // 定义基础的日期时间格式(日/月/年 时:分)
    private static final DateTimeFormat BASE_DATE_FORMAT = DateTimeFormat.getFormat("d/M/yyyy HH:mm");

    public static String formatDateTime(Date d) {
        if (d == null) {
            return NONE;
        }

        // 获取用户本地时区
        TimeZone localTimeZone = DateTimeFormat.getCurrentTimeZone();
        // 格式化本地时间部分
        String localDateTime = BASE_DATE_FORMAT.format(d, localTimeZone);

        // 计算本地时区与GMT的偏移量(毫秒转分钟)
        int totalOffsetMinutes = localTimeZone.getOffset(d) / (1000 * 60);
        int offsetHours = totalOffsetMinutes / 60;
        int offsetMinutes = Math.abs(totalOffsetMinutes % 60);

        // 处理偏移的正负符号
        String sign = totalOffsetMinutes >= 0 ? "+" : "-";
        // 格式化偏移为两位数字的小时和分钟
        String offsetDisplay = String.format("%sGMT %02d:%02d", sign, Math.abs(offsetHours), offsetMinutes);

        // 拼接最终结果
        return String.format("%s %s", localDateTime, offsetDisplay);
    }
}

代码细节说明

  • 用DateTimeFormat.getFormat("d/M/yyyy HH:mm")生成你需要的日期时间格式,确保日/月/年、时/分的显示符合要求
  • DateTimeFormat.getCurrentTimeZone()自动获取用户的本地时区,保证显示的是用户创建条目时的本地时间
  • 偏移量处理时,用%02d格式化小时和分钟,确保不足两位时补零(比如02:00而不是2:0)
  • 符号判断:当本地时区比GMT快时显示+,慢时显示-,完全匹配你的示例输出

现在调用formatDateTime(new Date()),如果用户在本地时间10:00创建条目,且时区比GMT快2小时,就会输出17/4/2018 10:00 +GMT 02:00,完美满足需求。

内容的提问来源于stack exchange,提问作者Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:40