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

Java中如何将指定格式的时间字符串转换为Unix时间戳?

Java中将"Feb 11 2023 9:35:41 PM"转换为Unix时间戳的方法

推荐方案(Java 8+,使用java.time新API)

Java 8及以上版本优先使用java.time包的API,线程安全且功能更完善,步骤如下:

  1. 定义匹配格式的DateTimeFormatter:注意时间字符串中日期部分是两个空格(Feb 11 2023),模式字符串需对应写两个空格;用h表示12小时制,a匹配AM/PM标记。若系统默认语言非英文,需指定英文Locale避免解析失败。
  2. 解析字符串为LocalDateTime:通过LocalDateTime.parse完成解析。
  3. 转换为Unix时间戳:将LocalDateTime关联时区后转成Instant,再通过getEpochSecond()(秒级)或toEpochMilli()(毫秒级)获取时间戳。

示例代码:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class TimeConverter {
    public static void main(String[] args) {
        String timeStr = "Feb 11  2023 9:35:41 PM";
        
        // 指定英文Locale,避免非英文环境下解析月份缩写失败
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd  yyyy h:mm:ss a", Locale.ENGLISH);
        LocalDateTime localDateTime = LocalDateTime.parse(timeStr, formatter);
        
        // 转换为系统默认时区的时间戳,如需UTC时区替换为ZoneId.of("UTC")
        long seconds = localDateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
        long millis = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        
        System.out.println("秒级Unix时间戳:" + seconds);
        System.out.println("毫秒级Unix时间戳:" + millis);
    }
}

兼容旧版本方案(使用SimpleDateFormat)

如果需要兼容Java 8以下版本,可使用SimpleDateFormat,但该类非线程安全,多线程环境需谨慎使用。

示例代码:

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

public class OldTimeConverter {
    public static void main(String[] args) throws ParseException {
        String timeStr = "Feb 11  2023 9:35:41 PM";
        
        // 指定英文Locale解析月份缩写
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd  yyyy h:mm:ss a", Locale.ENGLISH);
        Date date = sdf.parse(timeStr);
        
        long seconds = date.getTime() / 1000;
        long millis = date.getTime();
        
        System.out.println("秒级Unix时间戳:" + seconds);
        System.out.println("毫秒级Unix时间戳:" + millis);
    }
}

关键注意点

  • 时区问题:Unix时间戳基于UTC时区,若使用系统默认时区转换,结果会随运行环境时区变化。如需统一UTC时间,将ZoneId.systemDefault()替换为ZoneId.of("UTC")即可。
  • 月份缩写解析:必须指定英文Locale,否则在非英文系统环境下会无法识别Feb这类英文月份缩写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:32