【问题标题】:Parse time of day string解析时间字符串
【发布时间】:2015-04-09 13:08:49
【问题描述】:

输入是一个字符串,例如“23:55”或“09:20”,即“HH:mm”格式。我希望字符串以 UTC 格式指定一天中的时间。我想使用 java.time 来解析字符串,并将输出解析为具有今天指定时间的 Instant。如果需要,我可以在字符串中附加一个时区,即“23:55 UTC”。

我想使用得到的瞬间来计算从现在到提到的瞬间之间的纳米数。即

Duration.between(Instant.now(), resultingInstant).toNanos();

编辑:可能找到了解决方案:

resultingInstant = LocalTime.parse("23:55").atDate(LocalDate.now(ZoneOffset.UTC)).toInstant(ZoneOffset.‌​UTC)

【问题讨论】:

  • 好吧,那你最好开始编码。
  • @Manu 你的评论是因为没有问号吗?
  • @Shirish 很多不同的组合。很多人都在这里列出。但例如:LocalTime lt2 = LocalTime.parse("17:50 UTC", DateTimeFormatter.ofPattern("HH:mm z")); LocalTime lt3 = LocalTime.parse("17:50 PST", DateTimeFormatter.ofPattern("HH:mm z")); System.out.println("Hours diff: " + Duration.between(LocalTime.now(), lt2).toHours()); System.out.println("Hours diff: " + Duration.between(LocalTime.now(), lt3).toHours());
  • @HenrikSchinzel 一个 Instant 代表一个特定的时间点。那么您想如何仅使用有关小时和分钟的信息来创建它呢?
  • @BenWin 我希望是今天。 “输出是今天指定时间的 Instant。”

标签: java java-8 java-time


【解决方案1】:

另一种方法是使用 ZonedDateTime:

import static java.time.ZoneOffset.UTC;
import static java.time.temporal.ChronoUnit.NANOS;

LocalDate today = LocalDate.now(UTC);
ZonedDateTime resultingDate = ZonedDateTime.of(today, LocalTime.parse("23:55"), UTC);
long nanos = NANOS.between(ZonedDateTime.now(), resultingDate);

【讨论】:

  • 感谢您的回答!但是我有一个使用 Instants 的周边系统,所以我想坚持使用 Instants,而不必进行更大的重写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
相关资源
最近更新 更多