Java 日期时间格式 AM/PM 配置



我在格式化日期时遇到了一些问题:

日期 : 11/06/2020 04:14:20

日期格式:日/月/年 hh:毫米:ss a

例外:

java.text.ParseException:不可解析日期:"11/06/2020 04:14:20">

以下是代码

Blockquote

public String getFormatDate(String inputDate) {
String strDate = "";        
try {           
DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy hh:mm:ss a");
DateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
Date date1 = inputFormat.parse(inputDate);
strDate = outputFormat.format(date1);           
}catch( Exception exe) {
exe.printStackTrace();
logger.error( "[ERROR] getFormatDate:. ", exe );
} 
return strDate;     
}

Blockquote

任何帮助都将非常感激。

您可以检查此代码,您还必须使用日期字符串值传递 am/pm 部分,因为您的格式需要这样做。

//String date = "11/06/2020 04:14:20";
String date = "11/06/2020 04:14:20 am";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");

https://ideone.com/3nibwJ

为日期和时间使用正确的日期时间对象

对于绝大多数目的,您不应将日期和时间保留在字符串中,也不应将日期和时间从一种格式的字符串转换为另一种格式的字符串。将日期和时间保存在ZonedDateTimeLocalDateTime对象中。

当需要接受字符串输入时,请立即将该输入解析为日期时间对象。我正在使用并推荐java.time,现代Java日期和时间API:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm:ss");
String input = "11/06/2020 04:14:20";
LocalDateTime dateTime = LocalDateTime.parse(input, inputFormatter);
System.out.println(dateTime);

到目前为止的输出是:

2020-06-11T04:14:20

由于字符串中没有 AM 或 PM,因此我假设 04:14:20 是一天中从 00:00:00 到 23:59:59 的时间。如果你另有打算,你需要解释如何。

仅当您需要提供字符串输出时,才将日期和时间格式化为适当格式的字符串:

DateTimeFormatter outputFormatter = DateTimeFormatter
.ofPattern("MMMM dd, yyyy hh:mm:ss a", Locale.ENGLISH);
String output = dateTime.format(outputFormatter);
System.out.println(output);

2020年6月11日 凌晨 04:14:20

请为格式化程序提供区域设置,以便 Java 知道月份名称和 AM/PM 指示符使用哪种语言。

您的代码中出了什么问题?

您的字符串没有 AM 也没有 PM:11/06/2020 04:14:20。然而,您的格式模式字符串最终需要一个 AM/PM 标记。这就是格式模式字母a的含义。因此,您的字符串不是您需要的格式。这就是您观察到的例外的原因。

链接

Oracle 教程:日期时间解释如何使用 java.time。

感谢大家的帮助:

我已将源日期"11/06/2020 04:14:20">

更改为"06/11/2020 04:14:20 PM",然后在执行以下步骤后,它对我有用:

块引用

DateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
inputFormat.setTimeZone( TimeZone.getTimeZone("UTC") );                                     
Date dDate = inputFormat.parse( srcDate );                      
String strDeDate = formatDateToString( dDate, "dd/MM/yyyy hh:mm:ss a", "IST" );

public String formatDateToString(Date date, String format,String timeZone) {

if (date == null) return null;
SimpleDateFormat sdf = new SimpleDateFormat(format);
if (timeZone == null || "".equalsIgnoreCase(timeZone.trim())) {
timeZone = Calendar.getInstance().getTimeZone().getID();
}
sdf.setTimeZone(TimeZone.getTimeZone(timeZone));
return sdf.format(date);
}

块引用

最新更新