Java如何获取与JS toGMTString()输出格式一致的GMT日期字符串
问题原因
现有代码存在两处核心错误:
- 格式串不符合目标格式要求,使用的
yyyy-MM-dd'T'HH:mm:ssZ输出的是ISO标准时间格式,和JStoGMTString()输出的格式完全不匹配 - 返回语句
sdf.format(sdf)传入的参数是SimpleDateFormat对象本身,format方法要求传入日期类型参数,类型不匹配会直接触发运行时异常
实现方案
Java 8之前版本(基于SimpleDateFormat)
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; private static String getDateGMT() { Date date = new Date(); // 匹配目标格式的规则,指定Locale.US保证输出英文的星期、月份缩写 SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); return sdf.format(date); }
格式规则说明:
EEE:星期英文缩写dd:两位日期MMM:月份英文缩写yyyy:4位年份HH:mm:ss:24小时制时分秒z:时区名称
Java 8及以上版本(推荐使用java.time包)
java.time是Java 8开始提供的官方时间处理类库,所有类不可变、线程安全,完全规避了SimpleDateFormat的并发问题,实现代码如下:
import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; private static String getDateGMT() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); return ZonedDateTime.now(ZoneId.of("GMT")).format(formatter); }
两种实现输出的结果完全匹配JS
date.toGMTString()的格式,形如Thu, 04 Nov 2021 06:50:37 GMT。
内容的提问来源于stack exchange,提问作者Aavik
相关产品推荐
相关产品推荐

