0
我有簡單的測試什麼是Java的SimpleDateFormat的使用毫/微秒?
@SuppressWarnings("deprecation")
@Test
public void test_NO_MILLIS() throws ParseException {
String rabbit = "22-OCT-15 06.37.35";
final String PATTERN = "dd-MMM-yy HH.mm.ss";
Date dateObject = new SimpleDateFormat(PATTERN).parse(rabbit);
Assert.assertNotNull(dateObject);
Assert.assertEquals(22, dateObject.getDate());
Assert.assertEquals(10, dateObject.getMonth() + 1);
Assert.assertEquals(2015, dateObject.getYear() + 1900);
Assert.assertEquals(6, dateObject.getHours());
Assert.assertEquals(37, dateObject.getMinutes());
Assert.assertEquals(35, dateObject.getSeconds());
}
而且一切順利。結果,我得到22天。
但是我加入微秒既模式和字符串值後面解析
@Test
public void test_MILLIS() throws ParseException {
String rabbit = "22-OCT-15 06.37.35.586173000";
final String PATTERN = "dd-MMM-yy HH.mm.ss.SSSSSSSSS";
Date dateObject = new SimpleDateFormat(PATTERN).parse(rabbit);
Assert.assertNotNull(dateObject);
Assert.assertEquals(22, dateObject.getDate());
Assert.assertEquals(10, dateObject.getMonth() + 1);
Assert.assertEquals(2015, dateObject.getYear() + 1900);
Assert.assertEquals(6, dateObject.getHours());
Assert.assertEquals(37, dateObject.getMinutes());
Assert.assertEquals(35, dateObject.getSeconds());
}
我得到一個斷言失敗
junit.framework.AssertionFailedError: expected:<22> but was:<29>
at junit.framework.Assert.fail(Assert.java:57)
at junit.framework.Assert.failNotEquals(Assert.java:329)
at junit.framework.Assert.assertEquals(Assert.java:78)
at junit.framework.Assert.assertEquals(Assert.java:234)
at junit.framework.Assert.assertEquals(Assert.java:241)
at main.TestDateFormatTest.test_MILLIS(TestDateFormatTest.java:36)
...
這意味着這一天已成爲29,而不是22。出了什麼問題? 測試 平臺:Mac OSX上10.9,ubuntu的,Win7的 JDK:7,6
嘗試了4位數一年,看看是否仍然發生。也許它解析爲1915年,而不是2015年 –
「但之後我加入微秒......」 - 你9X'S',這使得納秒。微型或納米,它沒有任何意義,因爲'S'爲*毫秒*秒只定義了,所以用了3倍'S'其他任何會產生奇怪的結果。 – JimmyB
你提到微秒。 'SimpleDateFormat'不解析微秒 –