[英]SimpleDateFormat returns wrong date in 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
必填 Output 日期為: 29/03/22 - 22:00
而不是這個我會得到解析異常當我以dd-MMM-yy - HH:mm
格式轉換當前日期時,它返回 29-M03-22 - 11:38 這是錯誤的。
所以請幫我解決這個問題。
提前致謝。
確保您的格式化模式使用 US-ASCII 范圍 Unicode 中的字母M
,正如Dawood ibn Kareem 評論的那樣。
您使用的是多年前被 JSR 310 中定義的現代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" )
)
29/03/22 - 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/22 22:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.