为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何使用Java日历从日期中减去X天?

/ 猿问

请问如何使用Java日历从日期中减去X天?

三国纷争 2019-10-22 17:08:15

如何使用Java日历从日期中减去X天?

有人知道用Java日历从日期中减去X天的简单方法吗?

我还没有找到任何函数,它允许我从Java中的日期中直接减去X天。有人能给我指明正确的方向吗?



查看完整描述

3 回答

?
翻过高山走不出你

摘自这里的医生:

根据日历的规则向给定的日历字段添加或减去指定的时间。例如,要从日历的当前时间减去5天,可以通过调用:

Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).



查看完整回答
反对 回复 2019-10-23
?
繁星coding

你可以用add方法,并将其传递给一个负数。但是,您还可以编写一个更简单的方法,它不使用Calendar类的

public static void addDays(Date d, int days){
    d.setTime( d.getTime() + (long)days*1000*60*60*24 );}

这将获得日期的时间戳值(自时代以来的毫秒),并添加适当的毫秒数。您可以为Days参数传递一个负整数来执行减法。这将比“适当的”日历解决方案更简单:

public static void addDays(Date d, int days){
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    c.add(Calendar.DATE, days);
    d.setTime( c.getTime().getTime() );}

请注意,这两种解决方案都会更改Date对象作为参数传递,而不是返回一个全新的Date..如果需要的话,任何一个函数都可以很容易地更改为另一种方式。



查看完整回答
反对 回复 2019-10-23
?
MM们
LocalDate.now().minusDays( 10 )

最好指定时区。

LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )

细节

旧的日期时间类与早期版本的Java捆绑在一起,如java.util.Date/.Calendar已经被证明是麻烦的,混乱的,有缺陷的。避开他们。

java.time

Java 8和更高版本用新的java.time框架取代了这些旧类。看见补习..由JSR 310,灵感来自尤达-时间,并由三次-额外项目。Threeten-Backport项目将类移植到Java 6&7;将ThreeTenABP项目移植到Android。

这个问题含糊不清,不清楚是只要求约会,还是要求约会时间。

LocalDate

对于仅用于日期的,而不需要一天的时间,请使用LocalDate班级,等级。请注意,在确定日期(如“今天”)时,时区是至关重要的。

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );LocalDate tenDaysAgo = today.minusDays( 10 );

ZonedDateTime

如果您指的是约会时间,请使用Instant类中获取时间线的时间。世界协调时..从那里,调整到一个时区,以获得一个ZonedDateTime对象。

Instant now = Instant.now();  // UTC.ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );

关于java.time

这个java.time框架构建在Java 8及更高版本中。这些阶级取代了那个烦人的老人。遗产日期-时间类,如java.util.DateCalendar, & SimpleDateFormat.

这个尤达-时间项目,现在在维护模式,建议迁移到java.time上课。

若要了解更多信息,请参见Oracle教程..并搜索堆栈溢出的许多例子和解释。规格是JSR 310.

你们可以交换java.time对象直接使用数据库。用JDBC驱动程序符合JDBC 4.2或者晚些时候。不需要字符串,不需要字符串java.sql.*上课。

在哪里获得java.time类?

  • JavaSE 8, JavaSE 9, JavaSE 10

    ,后来
    • 内置的。
    • 带有捆绑实现的标准JavaAPI的一部分。
    • Java 9添加了一些次要的特性和修复。
  • JavaSE 6

    JavaSE 7

    • 中的大部分java.time功能都被移植到Java 6&7中。

      Threeten-Backport.

  • 安卓

    • Androidbundle实现的以后版本的java.time类。
    • 对于早期的Android(<26),

      ThreeTenABP

      项目适应

      Threeten-Backport

      (上文所述)。看见

      如何使用ThreeTenaBP….

这个三次-额外项目使用其他类扩展java.time。这个项目是java.time将来可能添加的一个试验场。您可能会在这里发现一些有用的类,例如IntervalYearWeekYearQuarter,和更多.



查看完整回答
反对 回复 2019-10-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信