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




