【发布时间】:2016-10-18 10:48:17
【问题描述】:
我需要解析具有以下格式的日期字符串:
yyyy-MM-dd TTTTT。所有模式字母都是标准的DateTimeFormatter 字母,除了TTTTT 部分,它是一个seconds-of-day 字段。
由于没有为这样的字段定义模式,我需要想出一些别的东西。我的第一个想法是尝试将该字段解析为 milli-of-day (A),但通过使用 5 A's 我的字段被视为最不重要的字符。 ..是的,不是我想要的。
是否有任何开箱即用的解决方案我可以使用,或者我必须求助于一些定制的解决方案(比如忽略TTTTT 字段,手动解析它并在结果日期使用LocalDateTime.plusSeconds())?
也就是说,我怎样才能使下面的测试用例通过?
public class DateTimeParserTest {
private static final String PATTERN = "yyyy-MM-dd TTTTT";
private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern(PATTERN);
@Test
public void testParseSecondsOfDay() throws Exception {
String input = "2016-01-01 86399";
LocalDateTime localDateTime = LocalDateTime.parse(input, FORMATTER);
assertEquals("2016-01-01T23:59:59", localDateTime.toString());
}
}
【问题讨论】:
-
86399 as second-of-day 对应于时钟时间 23:59:59,而不是 00:00,因此您的输入包含两个不同的时间。你想如何解决这种矛盾心理? “00:00:86399”部分根本无效。因此解决方案
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:").appendValue(ChronoField.SECOND_OF_DAY, 5).toFormatter();将无济于事。 -
@Meno Hochschild 你完全正确,我更正了问题以反映你的评论。
标签: java datetime datetime-format java-time datetime-parsing