从远程资源接收数据
答案 0 :(得分:2)
您正在将日期时间值与其格式化的字符串表示形式混淆。您需要将输入字符串解析为日期时间对象。然后生成另一个日期时间对象来表示“现在”。通过调用isBefore
或isAfter
方法比较这两个对象。
同样,不要将格式化的字符串$12.34
与数字混淆。你会如何将它与另一个数字进行比较?您可以将输入字符串解析为数字对象,执行业务逻辑,最后生成结果的String表示形式以显示给用户。同上日期工作。
不要担心转移时区。任何Instant
或ZonedDateTime
对都可以通过isBefore
或isAfter
进行比较,无论时区如何。
我不会显示任何代码,因为这个问题实际上是数百个其他问题的重复。请搜索StackOverflow以了解更多信息。搜索单词“java date parse”和“java date compare”。专注于涉及“java.time”或“Java 8”的答案。
答案 1 :(得分:2)
您的格式字符串与您的示例输入不匹配。要匹配输入,您的格式字符串应为"yyyy-MM-dd HH:mm:ss VV"
正如@JonSkeet和@BasilBourque建议的那样,您应该从输入字符串中解析Instant
或ZonedDateTime
。我没有看到在SO上解析Instant
解决问题的问题,所以这就是你如何做到的:
// may want to declare and maintain this elsewhere
DateTimeFormatter remoteFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss VV");
Instant remote = remoteFormat.parse(s, Instant::from);
boolean remoteInThePast = Instant.now().isAfter(remote);