如何判断Java日期和时区是否早于当前时间?
我的类有两个属性组成它的日期:如何判断Java日期和时区是否早于当前时间?,java,date,jodatime,Java,Date,Jodatime,我的类有两个属性组成它的日期: java.util.Date date; String timeZone; 如何查看此日期是否早于服务器上的当前时间 基本上我想写这样的东西,但要考虑时区: return date.before(new Date()); Date在内部存储为UTC,因此不需要使用timeZone变量。您只需使用Date.before(Date)tl;博士 使用类,该类始终处于活动状态。因此,这就成了一个无关紧要的问题 someInstant.isBefore( Instant
java.util.Date date;
String timeZone;
如何查看此日期是否早于服务器上的当前时间
基本上我想写这样的东西,但要考虑时区:
return date.before(new Date());
Date
在内部存储为UTC,因此不需要使用timeZone
变量。您只需使用Date.before(Date)
tl;博士
使用类,该类始终处于活动状态。因此,这就成了一个无关紧要的问题
someInstant.isBefore( Instant.now() )
java.time
现代方法使用java.time类取代了可怕的Date
&Calendar
类
如上所述,您的java.util.Date
正在UTC中记录一个时刻。所以不需要时区
同样,它的替代品java.time.Instant
类也记录了UTC中的一个时刻。所以不需要时区
Instant instant = Instant.now() ; // Capture current in UTC.
因此,在类中作为成员变量所需的只是Instant
public class Event {
Instant when ;
…
}
要比较即时
对象,请使用isAfter
、isBefore
和equals
方法
someInstant.isBefore( Instant.now() )
对于用户期望的时区中的演示,请分配一个ZoneId
以获取zoneDateTime
对象。Instant
和ZoneDateTime
都代表同一时刻,时间线上的同一点,但通过不同的挂钟时间查看
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, different wall-clock time.
String output = zdt.toString() ; // Generate text in standard ISO 8601 format, wisely extended to append the name of the zone in square brackets.
或者让java.time自动本地化输出。要本地化,请指定:
- 确定字符串的长度或缩写
- 确定:
- 翻译日名、月名等的人类语言
- 决定缩写、大写、标点、分隔符等问题的文化规范
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.JAPAN, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( l );
String output = zdt.format( f );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(
在内部存储为UTC,因此您的Date
变量是不必要且容易混淆的。timeZone
是创建日期的用户的时区。timeZone
是如何构造的?它从html表单发送,然后保存在数据库中。这个问题以前已经回答过:Date
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.JAPAN, etc. DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ) .withLocale( l ); String output = zdt.format( f );