วิธีแยกวิเคราะห์ LocalDateTime ด้วยช่องว่างนำหน้า

ฉันกำลังพยายามแยกวันที่จากหน้า html โดยใช้ LocalDateTime และฉันไม่สามารถหาวิธีแก้ปัญหาเพื่อให้การทดสอบต่อไปนี้ผ่านไปได้

(การใช้ TestNG) แถวแรกจะล้มเหลวเสมอ

static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss u");

    @DataProvider(name = "dateTimeFormats")
public Object[][] dateTimeFormats() {
    return new Object[][]{
            {"Mon Jan  5 06:41:07 2015", LocalDateTime.of(2015, 1, 5, 6, 41, 7)},
            {"Sun Jan 25 00:48:23 2015", LocalDateTime.of(2015, 1, 25, 0, 48, 23)},
            {"Mon Aug 14 07:58:00 2006", LocalDateTime.of(2006, 8, 14, 7, 58, 0)}
    };
}

@Test(dataProvider = "dateTimeFormats")
public void testParsePostDateTime(String dateTimeString, LocalDateTime expectedResult) {
    LocalDateTime result = LocalDateTime.parse(dateTimeString, DATE_TIME_FORMATTER);
    assertEquals(result, expectedResult);
}

มีแนวคิดใดบ้างที่ควรใช้รูปแบบวันที่?


person Yurii Bondarenko    schedule 25.01.2015    source แหล่งที่มา
comment
dateTimeString ของคุณและผลลัพธ์ที่คาดหวังคืออะไร   -  person SMA    schedule 25.01.2015
comment
@almasshaikh เมื่อฉันพยายามแยกสตริงนี้ จันทร์ที่ 5 มกราคม 06:41:07 2558 - ฉันต้องการรับผลลัพธ์นี้ LocalDateTime.of(2015, 1, 5, 6, 41, 7)   -  person Yurii Bondarenko    schedule 25.01.2015
comment
การแทรก dateTimeString.replaceAll(" +", " ") จะยุ่งยากเกินไปหรือไม่   -  person Marko Topolnik    schedule 25.01.2015


คำตอบ (1)


คุณสามารถใช้รูปแบบ "E MMM ppd HH:mm:ss u" คำอธิบายของสัญลักษณ์ p โปรดดูที่ javadoc . หมายถึงการเติมฟิลด์ถัดไปให้เหลือความกว้างเนื่องจากมีตัวอักษร p จำนวนมาก

person Meno Hochschild    schedule 26.01.2015
comment
นั่นเป็นทางออกที่หรูหราจริงๆ สิ่งที่ฉันกำลังมองหาอย่างแน่นอน - person Yurii Bondarenko; 26.01.2015
comment
double pp ก่อน d ดูเหมือนจะขัดกับสัญชาตญาณที่จะเว้นวรรคเพียงช่องเดียว ‹space›1, ‹space›2, ... บางทีความหมายคือ pp ใช้อักขระสองตัวและ d คือฟิลด์วันของเดือน? (docs.oracle.com/javase /8/docs/api/java/time/format/) - person Mariano Paniga; 20.08.2019
comment
@MarianoPaniga สัญลักษณ์ p ขึ้นอยู่กับวิธีการสร้าง padNext(int) ซึ่งมีอาร์กิวเมนต์ (เหมือนกับจำนวนตัวอักษรรูปแบบ) ระบุความกว้างทั้งหมดของฟิลด์ ดังนั้น ต้องใช้ตัวอักษรสองตัว pp สำหรับฟิลด์สองหลัก - person Meno Hochschild; 21.08.2019