GWT应用时间处理问题:获取GMT与本地时差及带偏移显示
GWT时区处理与时间格式化解决方案
嘿,我来帮你搞定这两个GWT时区相关的问题,一步一步来:
1. 获取GMT与本地时区的时差
在GWT里,我们可以借助TimeZone和DateTimeFormat类轻松拿到本地时区与GMT的偏移量:
- 首先获取当前用户的本地时区:
TimeZone localTz = DateTimeFormat.getCurrentTimeZone(); - 计算该时区相对于GMT的偏移(单位是毫秒):
int offsetMs = localTz.getOffset(new Date()); - 把毫秒转换为更易读的小时和分钟:
比如本地时区比GMT快2小时,int totalOffsetMinutes = offsetMs / (1000 * 60); int offsetHours = totalOffsetMinutes / 60; int offsetMinutes = Math.abs(totalOffsetMinutes % 60);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
相关产品推荐
相关产品推荐

