2016-08-19 586 views
0

我在努力將大15位數字字符串轉換爲日期格式。將15位數字字符串轉換爲java8時間戳

示例代碼:

String dateInString = "201410051252323"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ"); 
LocalDateTime dateTime = LocalDateTime.parse(dateInString, formatter); 

我得到以下異常

java.time.format.DateTimeParseException: Text '2014100591523' could not be parsed at index 0 

任何人都可以請建議在Java中8

回答

1

做到這一點的最好辦法你有正確的想法,但是您的代碼有兩個問題 - 一個語法,另一個邏輯:

  • 您的模式預計將用連字符和冒號和空格格式化字符串。例如,「yyyy-MM-dd」將匹配「2014-10-05」,但不匹配「20141005」。要匹配後者,只需放下連字符並使用「yyyyMMdd」即可。
  • 在模式中使用'Z'作爲最後一位數字,表示您希望字符串中的時區偏移。但'Z'模式匹配偏移如「+0000」和「-8000」,而不是一個數字。此外,爲了表示與時區的日期時間,你應該使用ZonedDateTimeOffsetDateTime類,而不是LocalDateTime

我不知道哪個時區在您的示例字符串中的「3」是要象徵,如果它確實應該表示一個區域偏移量。如果您無法控制數據集的格式,則必須剝離最後一位數字並分開處理。

 

    String dateInString = "201410051252323"; 
    String dateTimeString = dateInString.substring(0, 14); // "20141005125232" 
    String zoneDigitString = dateInString.substring(14); // "3" 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); // no "Z" 
    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter); 

    /* Manually convert zoneDigitString to a ZoneId here */ 
    ZoneId zone = ...; 

    ZonedDateTime zonedDateTime = dateTime.atZone(zone); 

根據「3」代表的情況,您必須自行處理「...」部分。

+0

謝謝你。真的有用:) – Sushma

相關問題