我有以下代码将即时转换为字符串,然后将其转换回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
(两次都是)。从00到23小时的工作日需要大写字母HH
hh
表示从01到12的上午或下午的小时。所以出问题的是java。时间不知道你的字符串中的12
指的是上午12点还是下午12点,并拒绝为你猜测。
如果仔细阅读异常消息,您也会注意到它说,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
这是错误的!我在UTC 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
格式化和解析这个问题及其答案中的小时值,有更多信息:SimpleDataFormat上java hh:mm和hh:mm之间的差异。问题是关于臭名昭著的麻烦的SimpleDateFormat
,但答案对DateTimeFormatter
也有效。
问题内容: 我有以下代码将Instant转换为String,然后将其转换回I 它将timestampString打印为: 并未能解析该字符串: 为什么即使我将时间戳转换为相同的格式也无法解析它? 问题答案: 在一天中的小时内使用HH代替hh 您要问的问题是(两次)在格式模式字符串中使用小写字母。您需要从00到23的小时中的大写字母,是从01到12的AM或PM中的小时数。因此出了问题,java.ti
我在分析时遇到问题: 如果我对文档的理解正确,我应该能够使用值,但我遇到了以下异常: 我从一些配置中检索< code>1h值,为了简单起见,我省略了其他代码。 我该怎么解决这个问题?
我在解析持续时间时遇到问题: 如果我对文档的理解正确,我应该能够使用1h值,但我得到了以下例外: 我从一些配置中检索1h值,为了简单起见,我省略了其他代码。 我怎样才能解决这个问题?
我正在开发新闻应用程序,我已经将从现在到那个日期的运行时间进行了转换,但当我运行代码时,我的适配器类中出现了以下异常 JAVA时间总体安排DateTimeParseException:无法在索引0处分析文本“09/10/2019”,无法在索引19处找到未分析的文本 低于我的适配器类 以下是JSON响应:
Im使用Python3.6 tensorflow 1.5 Im跟踪链接 但我得到了一个错误: doe@doe:~/anaconda3/envs/tenorflow/模型/研究/object_detection$python3train.py--logtostderr-train_dir=训练/-pipeline_config_path=训练/ssd_mobilenet_v1_coco.config