簡體   English   中英

使用 SimpleDateFormat、Java 的日期解析不正確

[英]Incorrect date parsing using SimpleDateFormat, Java

我需要使用日期模式“yyyy-MM-dd”從輸入字符串中解析日期,如果日期將以任何其他格式出現,則拋出錯誤。

這是我解析日期的一段代碼:

private void validateDate() throws MyException {
  Date parsedDate;
  String DATE_FORMAT = "yyyy-MM-dd";
  try{
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
    System.out.println(parsedDate);
  } catch (ParseException e) {
    throw new MyException(“Error occurred while processing date:” + getMyDate());
  }

}

當我在 myDate 中輸入像“2011-06-12”這樣的字符串時,我將得到輸出“Thu Sep 29 00:00:00 EEST 2011”,這很好。

當我發送像“2011-0612”這樣的錯誤字符串時,我收到了預期的錯誤。

當我試圖傳遞一個仍然有兩個“連字符”的字符串時,問題就開始了,但數字的數量是錯誤的。 例子:

輸入字符串“2011-06-1211”結果“Tue Sep 23 00:00:00 EEST 2014”。

輸入字符串“2011-1106-12”結果“Mon Feb 12 00:00:00 EET 2103”。

我無法更改字符串日期的輸入格式。

我怎樣才能避免它?

您是否嘗試過在SimpleDateFormat上調用setLenient(false)

import java.util.*;
import java.text.*;

public class Test {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        Date date = format.parse("2011-06-1211"); // Throws...
        System.out.println(date);
    }
}

請注意,我還建議設置SimpleDateFormat的時區和語言環境。 (或者,使用Joda Time代替...)

同樣的問題,我注意到當我直接在 main 方法中使用此代碼時,它返回正確的日期,而當我通過單獨的方法使用相同的代碼時,它返回不正確的日期

String string = "03/01/2015";
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
Date date1 = format.parse(string);
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));

返回錯誤日期的函數中的代碼

public Date isValidDate(String dateToValidate, String dateFormat){

  if(dateToValidate == null){
     return null;
  }

  DateFormat format = new SimpleDateFormat(dateFormat,Locale.ENGLISH);
  //format.setLenient(false);

  Date date;
  try {

      date = format.parse(dateToValidate);

  } catch (ParseException e) {

      e.printStackTrace();
      return null;
  }

  return date;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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