tl;博士
Duration.between( // Calculate time elapsed between two moments.
LocalDateTime // Represent a date with time-of-day but lacking the context of a time zone or offset-from-UTC.
.parse( "2013-10-17 15:45:01".replace( " " , "T" ) )
.atOffset( ZoneOffset.UTC ) // Returns an `OffsetDateTime` object.
.toInstant() , // Returns an `Instant` object.
Instant.now() // Capture the current moment as seen in UTC.
)
.toMinutes()
> 5
java.time
其他答案已经过时,使用了多年前被 JSR 310 中定义的现代 java.time 类所取代的糟糕类。
解析传入的字符串。
String input = "2013-10-17 15:45:01" ;
修改输入以符合 ISO 8601。我建议您对数据的发布者进行有关 ISO 8601 标准的教育。
String inoutModified = input.replace( " " , "T" ) ;
解析为LocalDateTime,因为此输入缺少预期偏移量或时区的指示符。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
我假设输入旨在表示 UTC 中的时刻,偏移量为 0 小时分钟秒。如果是这样,请根据 ISO 8601 教育您的数据发布者在末尾附加 Z 以表明这一点。
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
提取一个更简单类的对象Instant。此类始终采用 UTC。
Instant then = odt.toInstant() ;
获取以 UTC 显示的当前时刻。
Instant now = Instant.now() ;
计算差异。
Duration d = Duration.between( then , now ) ;
获取持续时间作为总分钟数。
long minutes = d.toMinutes() ;
测试。
if ( minutes > 5 ) { … }
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。 Hibernate 5 & JPA 2.2 支持 java.time。
从哪里获取 java.time 类?