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

如何在Java中生成与JavaScript Date对象完全一致的日期输出

Java实现JavaScript Date默认输出格式方案

格式匹配规则

JavaScript执行new Date()的默认字符串输出遵循固定格式:

  • 周几:3位英文缩写
  • 月份:3位英文缩写
  • 日期:两位数字,不足补前导0
  • 年份:四位数字
  • 时间:24小时制,时分秒各两位,冒号分隔
  • 时区标识:固定前缀GMT,后跟正负号+四位偏移量
  • 时区名称:括号包裹的时区全称,自动适配夏令时/冬令时命名

最简实现(无第三方依赖)

兼容所有Java版本(使用SimpleDateFormat)

直接复用JDK自带的日期格式化类即可,注意指定英文Locale避免本地化输出偏差:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateDemo {
    // 全局复用格式化实例,多线程场景建议用ThreadLocal包装
    private static final SimpleDateFormat JS_DATE_FORMAT = new SimpleDateFormat(
            "EEE MMM dd yyyy HH:mm:ss 'GMT'Z (zzzz)",
            Locale.ENGLISH
    );

    public static void main(String[] args) {
        // 输出效果和JS完全一致
        System.out.println(JS_DATE_FORMAT.format(new Date()));
    }
}

运行输出示例:

Sat Jul 02 2022 22:49:06 GMT-0800 (Alaska Daylight Time)

Java 8+ 推荐实现(线程安全)

Java 8及以上版本推荐用java.time包的线程安全API,无需考虑多线程并发问题:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateDemo {
    private static final DateTimeFormatter JS_DATE_FORMATTER = DateTimeFormatter.ofPattern(
            "EEE MMM dd yyyy HH:mm:ss 'GMT'xx (zzzz)",
            Locale.ENGLISH
    );

    public static void main(String[] args) {
        System.out.println(JS_DATE_FORMATTER.format(ZonedDateTime.now()));
    }
}

关键注意点

  • 必须传入Locale.ENGLISH参数,否则非英文系统会输出本地化的周、月、时区名称,和JS输出不匹配
  • 模式串中GMT需要用单引号包裹,标记为固定字符串,避免被格式化器解析为占位符
  • 格式化逻辑会自动识别当前系统时区的夏令时状态,输出对应时区全称,和JS的时区显示逻辑完全对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:12:18