private String dateFormatter(String olddate) {
String newDate = "";
try {
SimpleDateFormat initDate = new SimpleDateFormat("dd-MMM-yy - HH:mm");
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy - HH:mm");
newDate = formatter.format(initDate.parse(olddate));
} catch (ParseException e) {
e.printStackTrace();
}
return newDate;
}
输入日期为:29-Mar-22 - 22:00
所需输出日期为:29/03/22 - 22:00
相反,我将得到解析异常当我将当前日期转换为dd-MMM-yy - HH:mm
格式时,它返回29-M03-22-11:38,这是错误的。
所以请帮我解决这个问题。
提前谢谢。
如Dawood ibn Kareem所评论的,请确保您的格式模式使用的是Unicode的US-ASCII范围中的字母M
。
java.time
您使用的是糟糕的日期-时间类,这些类在几年前被JSR310中定义的现代java.time类所取代。
LocalDateTime
.parse(
"29-Mar-22 - 22:00" ,
DateTimeFormatter.ofPattern( "dd-MMM-uu - HH:mm" ).withLocale( Locale.US )
)
.format(
DateTimeFormatter.ofPattern( "dd/MM/uu - HH:mm" )
)
请在IdeOne.com上实时查看此代码。
22年3月29日-22:00
提示:使用四位数年份。根据我的经验,节省两位数的空间不值得因为歧义而造成混乱。
提示:(a(只使用标准ISO 8601格式进行数据交换,(b(在生成字符串值以呈现给用户时,让java.time自动本地化,而不是对此类格式进行硬编码。
LocalDateTime
.parse(
"29-Mar-22 - 22:00" ,
DateTimeFormatter.ofPattern( "dd-MMM-uu - HH:mm" ).withLocale( Locale.US )
)
.format(
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.SHORT )
.withLocale( new Locale( "es" , "AR ") ) // Spanish language, Argentina culture.
)
29/3/2222:00