本文介紹了包含2年日期的SimpleDateFormat問題的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我在試著理解兩件事:
-
以下代碼為什么不拋出異常(因為
SimpleDateFormat
不寬松)它沒有拋出異常,但為什么它將年份解析為0013(而不是using the rules here從今天起+80:-20年)
代碼如下
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestDate {
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
format.setLenient(false);
Date date = format.parse("01/01/13"); // Since this only has a 2 digit year, I would expect an exception to be thrown
System.out.println(date); // Prints Sun Jan 01 00:00:00 GMT 13
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.YEAR)); // Prints 13
}
}
如果有區(qū)別,我在Ubuntu上使用的是Java 1.6.0_38-B05
推薦答案
SimpleDateFormat接口:
對于解析,如果模式字母的數(shù)量大于2,則按字面解釋年份,而不考慮位數(shù)。因此,使用”MM/dd/yyyy”模式,”01/11/12″將解析為公元12年1月11日
對于lenient,當(dāng)設(shè)置為FALSE時,解析會拋出無效日期的異常,例如01/32/12,而在lenient模式下,該日期被視為02/01/12。SimpleDateFormat內(nèi)部使用Calendar,寬大的詳細(xì)信息可以在Calendar接口中找到。
這篇關(guān)于包含2年日期的SimpleDateFormat問題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,