Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何判断Java日期和时区是否早于当前时间?_Java_Date_Jodatime - Fatal编程技术网

如何判断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(
      Date
      在内部存储为UTC,因此您的
      timeZone
      变量是不必要且容易混淆的。
      timeZone
      是创建日期的用户的时区。
      Date
      是如何构造的?它从html表单发送,然后保存在数据库中。这个问题以前已经回答过:
      Locale l = Locale.CANADA_FRENCH ;   // Or Locale.US, Locale.JAPAN, etc.
      DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
                                             .withLocale( l );
      String output = zdt.format( f );