将文本转换为即时[重复]

问题描述 投票:1回答:1

我正在解析服务器的访问日志文件,我想将字符串日期转换为即时,所以我可以将它与间隔边界进行比较。我有这样的字符串:

20 / Mar / 2019:00:00:01 +0100

我想立即解析它。我试过这段代码:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMM/yyyy:hh:mm:ss Z");
            TemporalAccessor temporalAccessor = formatter.parse(lo.time);
            LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
            ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
            Instant result = Instant.from(zonedDateTime);

错误是这样的:

错误:无法在索引3处解析文本'20 / Mar / 2019:00:00:01 +0100'

似乎这个月有问题,但我很确定模式是好的。

java date datetime-parsing
1个回答
2
投票

您正在使用hh,它是时钟小时的上午(1-12)而不在日期字符串中添加AM / PM信息。

相反,你应该使用像时间(0-23)的模式:DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss Z");

或者您可以在日期模式中添加aDateTimeFormatter.ofPattern("dd/MMM/yyyy:hh:mm:ss a Z");

并在日期字符串中传递AM / PM信息:

"20/Mar/2019:00:00:01 AM +0100"


编辑:

根据评论,问题也可能在于您正在使用的语言环境,为了使用en / US语言环境,只需将语言环境传递给ofPattern方法:

 Locale locale = new Locale("en", "US");
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss Z", locale); 

但你仍然需要纠正上午时钟(hh)到一小时(HH)。

© www.soinside.com 2019 - 2024. All rights reserved.