SimpleDateFormat在java中返回错误的日期


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

相关内容

  • 没有找到相关文章

最新更新