簡體   English   中英

SimpleDateFormat 在 java 中返回錯誤的日期

[英]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 評論的那樣

java.時間

您使用的是多年前被 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" )
)

請參閱在 IdeOne.com 上實時運行的代碼

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM