You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中如何将指定格式时间转换为Mar 27,2018 5:18 pm格式?

Java时间格式转换解决方案

嘿,我来帮你搞定这个时间转换需求!首先得提一句,Java 8及以后推出的java.time包是处理日期时间的首选方案,比你现在用的SimpleDateFormat靠谱不少——毕竟后者不是线程安全的,在多线程场景下容易出奇怪的问题。下面分两种方式给你实现步骤:

一、推荐使用Java 8+的java.time API

这个方案更简洁、安全,代码示例如下:

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

public class TimeConversionExample {
    public static void main(String[] args) {
        // 输入时间字符串(注意你输入的年份是2108,目标是2018,这里按输入原样处理,若为笔误可自行修改)
        String inputTime = "2108-03-27T17:18:16.985+0530";
        
        // 定义解析输入格式的DateTimeFormatter
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.ENGLISH);
        
        // 解析输入字符串为OffsetDateTime对象
        OffsetDateTime offsetDateTime = OffsetDateTime.parse(inputTime, inputFormatter);
        
        // 定义目标格式的DateTimeFormatter(MMM是月份缩写,h是12小时制,a是上午/下午标识)
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MMM dd,yyyy h:mm a", Locale.ENGLISH);
        
        // 格式化得到目标字符串
        String outputTime = offsetDateTime.format(outputFormatter);
        
        System.out.println(outputTime); // 输出:Mar 27,2108 5:18 pm
    }
}

关键点说明:

  • Z用于匹配输入中的时区偏移量(比如+0530
  • Locale.ENGLISH确保月份缩写是英文的(比如Mar
  • 如果你的输入年份确实是笔误(2108写成2018),直接修改inputTime里的年份即可

二、旧版SimpleDateFormat方式(不推荐)

如果你因为项目限制必须使用SimpleDateFormat,也可以这样实现,但要注意它的线程安全问题:

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

public class OldTimeConversionExample {
    public static void main(String[] args) throws ParseException {
        String inputTime = "2108-03-27T17:18:16.985+0530";
        
        // 输入格式:注意SSS匹配毫秒,Z匹配时区偏移
        SimpleDateFormat inputSdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.ENGLISH);
        Date date = inputSdf.parse(inputTime);
        
        // 目标格式:MMM对应月份缩写,h是12小时制,a是上午/下午
        SimpleDateFormat outputSdf = new SimpleDateFormat("MMM dd,yyyy h:mm a", Locale.ENGLISH);
        String outputTime = outputSdf.format(date);
        
        System.out.println(outputTime); // 输出:Mar 27,2108 5:18 pm
    }
}

注意事项:

  • SimpleDateFormat是非线程安全的,不要在多线程环境下共享同一个实例
  • 同样需要指定Locale.ENGLISH来保证月份缩写为英文

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

火山引擎 最新活动