2015-10-20 190 views
0

我在我與毫秒發現日期時間如下字符串:的Java解析日期時間毫秒爲日期越來越解析錯誤

     Calendar now = Calendar.getInstance(); 
        int year = now.get(Calendar.YEAR); 
        int month = now.get(Calendar.MONTH) + 1; // Note: zero based! 
        int day = now.get(Calendar.DAY_OF_MONTH); 
        int hour = now.get(Calendar.HOUR_OF_DAY); 
        int minute = now.get(Calendar.MINUTE); 
        int second = now.get(Calendar.SECOND); 
        int millis = now.get(Calendar.MILLISECOND); 

        String monthup = String.valueOf(month); 
        String dayup = String.valueOf(day); 
        String hourup = String.valueOf(hour); 
        String minuteup = String.valueOf(minute); 
        String secondup = String.valueOf(second); 
        String millisup = String.valueOf(millis); 

        if(monthup.length()==1){monthup="0"+monthup;} 
        if(dayup.length()==1){dayup="0"+dayup;} 
        if(hourup.length()==1){hourup="0"+hourup;} 
        if(minuteup.length()==1){minuteup="0"+minuteup;} 
        if(secondup.length()==1){secondup="0"+secondup;} 
        if(millisup.length()==1){millisup="0"+millisup;} 
        if(millisup.length()==2){secondup="00"+millisup;} 


        String timewithmilsec = year+ monthup + dayup+ hourup+ minuteup+ secondup+ millisup; 
        System.out.println(timewithmilsec); 

我得到一個值:20151020115216690這是obviousely正確的。我想解析它java Date format。 我所做的是如下:

try{ 
        DateFormat formatter = new SimpleDateFormat("yyyyMMdHHmmssaaa"); 
        Date date = formatter.parse(timewithmilsec); 
        System.out.println(date); 
        } 
        catch(Exception e){ 
         System.out.println(e); 
        } 

我正在一個錯誤,如下所示:

java.text.ParseException: Unparseable date: "20151020115247995"

+0

你只有一個'D'和'aaa'沒有做什麼你(顯然)認爲它做 – MadProgrammer

回答

1

你只有一個d在您的格式,但一天被填充到兩個字符,另外,根據JavaDocs ...

a Am/pm marker Text PM 

這不是毫秒佔位符,我想你意味着SSS

例如...

Calendar now = Calendar.getInstance(); 
int year = now.get(Calendar.YEAR); 
int month = now.get(Calendar.MONTH) + 1; // Note: zero based! 
int day = now.get(Calendar.DAY_OF_MONTH); 
int hour = now.get(Calendar.HOUR_OF_DAY); 
int minute = now.get(Calendar.MINUTE); 
int second = now.get(Calendar.SECOND); 
int millis = now.get(Calendar.MILLISECOND); 

String monthup = String.valueOf(month); 
String dayup = String.valueOf(day); 
String hourup = String.valueOf(hour); 
String minuteup = String.valueOf(minute); 
String secondup = String.valueOf(second); 
String millisup = String.valueOf(millis); 

if (monthup.length() == 1) { 
    monthup = "0" + monthup; 
} 
if (dayup.length() == 1) { 
    dayup = "0" + dayup; 
} 
if (hourup.length() == 1) { 
    hourup = "0" + hourup; 
} 
if (minuteup.length() == 1) { 
    minuteup = "0" + minuteup; 
} 
if (secondup.length() == 1) { 
    secondup = "0" + secondup; 
} 
if (millisup.length() == 1) { 
    millisup = "0" + millisup; 
} 
if (millisup.length() == 2) { 
    secondup = "00" + millisup; 
} 

String timewithmilsec = year + monthup + dayup + hourup + minuteup + secondup + millisup; 
System.out.println(timewithmilsec); 

try { 
    DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); 
    Date date = formatter.parse(timewithmilsec); 
    System.out.println(date); 
} catch (Exception e) { 
    System.out.println(e); 
} 

這對我打印

20151020173034124 
Tue Oct 20 17:30:34 EST 2015 

雖然我吧,讓我給你介紹String.format,可你int減少String轉換和填充代碼到...

String timewithmilsec = String.format("%04d%02d%02d%02d%02d%02d%03d", year, month, day, hour, minute, second, millis); 

我得到週二10月20日12時04分08秒IST 2015年,但有趣的是,我沒有看到這裏的任何毫秒

Date#toString將不包括默認毫秒,你的Wi我需要提供一個DateFormat這可以。

如果我System.out.println(new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS").format(date));替換最後System.out.println它打印像

20 Oct 2015 17:37:14.856 

(該值20151020173714856

+0

我得到'Tue Oct 20 12:04:08 IST 2015',但有趣的是我沒有在這裏看到任何毫秒 – Santhucool

+0

@Santhucool'Date#toString'通常不會打印出「毫秒」,您需要提供一種格式 – MadProgrammer

+0

確定好友,如果你能幫我把'Tue Oct 20 12:04:08 IST 2015'變成'Tue Oct 20 12:04:08 IST 2015''那麼我的問題就解決了!我的意思是轉換後的另一種方式! – Santhucool

1

根據文檔信S響應毫秒所以您的格式應該是這樣new SimpleDateFormat("yyyyMMddHHmmssSSS");(你在您的格式中有一個d)。

+0

我得到'週二10月20日12時04分08秒IST 2015'但有趣的是我沒有在這裏看到的毫秒數 – Santhucool

+0

如果你想以毫秒爲單位打印日期,你應該創建另一個'SimpleDateFormat'的實例,其格式爲你想要的輸出,然後像'System.out.println(sdf.format(date))一樣打印出來;''其中'sdf'是'SimpleDateFormat'的新實例,'date'是代碼中的日期。 – wawek

1

答案是缺少「d」的日期格式,其中@MadProgrammer描述。

另外,應該重新考慮日期的字符串表示的生成。您應該使用SimpleDateFormat.format()生成日期字符串,如下面的代碼示例:

Calendar now = Calendar.getInstance(); 
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); 
String formattedDate = formatter.format(now.getTime()); 
System.out.println("Formatted date: " + formattedDate); 

和輸出將在您請求的格式。

Formatted date: 20151020094934279