首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中比较日期和使用Calendar类和Date类

问Java中比较日期和使用Calendar类和Date类
EN

Stack Overflow用户
提问于 2011-05-08 04:34:03
回答 3查看 325关注 0票数 1

我希望你能帮助我理解以下几点:

假设我有一个date类型的值

代码语言:javascript
复制
Date start;

如何确认当前日期距开始日期是一周或更长时间?

我试图在web上破解Java API,但我搞混了。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-08 04:46:36

使用日历,您可以将days add to the start date,然后将其与当前日期进行比较。

例如:

代码语言:javascript
复制
Date start = Calendar.getInstance().getTime();
start.setTime(1304805094L); // right now...
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 7);
start.compareTo(cal.getTime());
票数 2
EN

Stack Overflow用户

发布于 2011-05-08 04:44:51

为此,我会使用Joda时间。http://joda-time.sourceforge.net/

然后,您可以使用此方法作为要执行的操作的模板。该方法是来自Joda站点的一个示例:

代码语言:javascript
复制
public boolean isRentalOverdue(DateTime datetimeRented) {
  Period rentalPeriod = new Period().withDays(2).withHours(12);
  return datetimeRented.plus(rentalPeriod).isBeforeNow();
}
票数 2
EN

Stack Overflow用户

发布于 2018-01-23 12:19:08

tl;dr

当前日期距离开始日期是一周还是更长时间?

代码语言:javascript
复制
LocalDate.now().minusWeeks( 1 ).isAfter( someLocalDate )

java.time

现代方法使用java.time类。

LocalDate类表示不带时间和时区的仅日期值。

在确定日期时,时区至关重要。在任何给定的时刻,全球各地的日期都会因地区而异。例如,午夜过后的几分钟在Paris France中是新的一天,而在Montréal Québec中仍然是“昨天”。

如果未指定时区,JVM将隐式应用其当前的默认时区。默认设置随时可能更改,因此您的结果可能会有所不同。最好将所需/预期的时区显式指定为参数。

指定continent/region格式的proper time zone name,如America/Montreal、Africa/Casablanca或Pacific/Auckland。切勿使用3-4个字母的缩写,例如EST或IST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

代码语言:javascript
复制
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

指定其他日期。你可以用一个数字来设置月份,用1-12来表示一月到十二月。

代码语言:javascript
复制
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

或者,更好的方法是使用预定义的Month枚举对象,一年中的每个月一个。提示:在整个代码库中使用这些Month对象,而不仅仅是一个整数,以使您的代码更具自我文档化,确保有效的值,并提供type-safety。

代码语言:javascript
复制
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

那么,当前日期是否至少比目标日期晚一周?

一周前算一下。

代码语言:javascript
复制
LocalDate weekAgo = today.minusWeeks( 1 ) ;

请比较isBefore、isAfter和isEqual方法。

代码语言:javascript
复制
Boolean isOverAWeekOld = ld.isBefore( weekAgo ) ;

奖励:看看目标日期是否在过去一周内。

代码语言:javascript
复制
boolean inPastWeek = ( ! ld.isBefore( weekAgo ) ) && ld.isBefore( today ) ;

关于java.time

java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date、Calendar和SimpleDateFormat。

现在在maintenance mode中的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle Tutorial。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310。

从哪里获取java.time类?

  • ,,以及后来内置的
    • 。与implementation.
    • Java 9捆绑在一起的标准Java API的
    • 部分添加了一些次要功能和fixes.

​

  • 和.

中的

  • 许多java.time功能已向后移植到Java6和7

​

    • 更高版本的Android捆绑实现的java.time类。
    • 对于较早的Android,项目适配ThreeTen-Backport (如上所述)。请参阅.

​

项目使用额外的类扩展了java.time。这个项目是未来可能添加到java.time中的试验场。您可能会在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和more。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5923816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档