我有以下代码将Instant转换为String,然后将其转换回I
String timestampString = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"));
LOGGER.info("timestampString: " + timestampString);
Instant instant =
LocalDateTime.parse(timestampString,
DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")).toInstant(ZoneOffset.UTC);
它将timestampString打印为: 2019-06-07 12:45:57
并未能解析该字符串:
java.time.format.DateTimeParseException: Text '2019-06-07 12:45:57' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MinuteOfHour=45, HourOfAmPm=0, NanoOfSecond=0, SecondOfMinute=57, MilliOfSecond=0, MicroOfSecond=0},ISO resolved to 2019-06-07 of type java.time.format.Parsed
为什么即使我将时间戳转换为相同的格式也无法解析它?
您要问的问题是hh
(两次)在格式模式字符串中使用小写字母。您需要HH
从00到23的小时中的大写字母,hh
是从01到12的AM或PM中的小时数。因此出了问题,java.time不知道12
您的字符串中是12
AM还是12 PM并拒绝为您猜测。
如果您仔细阅读异常消息,您还会注意到该异常消息已HourOfAmPm=0
被解析。没有说HourOfDay
。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestampString = LocalDateTime.now().format(formatter);
System.out.println("timestampString: " + timestampString);
Instant instant = LocalDateTime.parse(timestampString, formatter)
.toInstant(ZoneOffset.UTC);
System.out.println("instant: " + instant);
刚运行此代码段时,得到以下输出:
timestampString: 2019-06-08 19:22:51 instant: 2019-06-08T19:22:51Z
这是 错的
!我在世界标准时间17:22而非19:22左右运行了代码段。由于丹麦仍在使用夏令时(该死),因此此处的当地时间为19:22,用于显示结果,并转换为UTC的相同挂钟时间,而不是同一时刻。您应该
始终 将所需的时区传递给该now
方法,以避免此类错误。由于您想要UTC:
String timestampString = LocalDateTime.now(ZoneOffset.UTC).format(formatter);
timestampString: 2019-06-08 17:27:57 instant: 2019-06-08T17:27:57Z
更好的是,不要LocalDateTime
用于保留您想暂时使用的东西。使用Instant
,OffsetDateTime
或ZonedDateTime
代替。
在此问题及其答案中hh
,有更多有关使用HH
或kk
用于格式化和解析小时值的信息:SimpleDateFormat上的java
HH:mm和hh:mm之间的区别。问题是问的出了名的麻烦SimpleDateFormat
,但答案也同样有效DateTimeFormatter
。
我有以下代码将即时转换为字符串,然后将其转换回I 它将timestampString打印为: 在分析字符串时失败: 为什么即使它与我将时间戳转换为的格式相同,它也无法解析它?
我在分析时遇到问题: 如果我对文档的理解正确,我应该能够使用值,但我遇到了以下异常: 我从一些配置中检索< code>1h值,为了简单起见,我省略了其他代码。 我该怎么解决这个问题?
我在解析持续时间时遇到问题: 如果我对文档的理解正确,我应该能够使用1h值,但我得到了以下例外: 我从一些配置中检索1h值,为了简单起见,我省略了其他代码。 我怎样才能解决这个问题?
我无法理解为什么当我通过的文本符合格式时,我会得到DateTimeParseException错误。下面是导致该问题的代码: 奇怪的是。每当我查询用户一段时间(让我们以00:02:30为例),它就会完全按照我想要的方式运行。但是当我使用我的方法(从文本文件中提取时间)时,它会出现错误: 线程“main”java.time.format.DateTimeParseException中出现异常:无法分
我正在开发新闻应用程序,我已经将从现在到那个日期的运行时间进行了转换,但当我运行代码时,我的适配器类中出现了以下异常 JAVA时间总体安排DateTimeParseException:无法在索引0处分析文本“09/10/2019”,无法在索引19处找到未分析的文本 低于我的适配器类 以下是JSON响应: