无法使用 jodatime 从 Java 中的当前日期减去一天

Cannot deduct a day from current date in Java using jodatime

我使用 JodaTime 从当前日期减去一天。但这对我不起作用,这意味着,我的日期保持不变,没有任何扣除! .

这是代码,

public class Note {
    private java.sql.Date date;

    public java.sql.Date getDate() {
        return date;
    }

    public void setDate(java.sql.Date date) {
        this.date = date;
    }
}


Note notez=new Note();

notez.setDate(new java.sql.Date(new DateTime(new  Date()).minus(1).toDate().getTime()));

对此有什么想法。

谢谢。

试试这个:

notez.setDate(new java.sql.Date(new DateTime(new  Date()).minusDays(1).toDate().getTime()));

DateTime.minus(long) 将扣除传递给方法的毫秒数。

您要找的是 DateTime.minusDays(int)

勾选Javadoc

为什么不用 java.util.Calendar & java.util.Date 代替。

像这样工作很容易

import java.util.Calendar;
import java.util.Date;

...

    Date today = new Date();
    Calendar c = Calendar.getInstance(); 
    c.setTime(today); 
    c.add(Calendar.DATE, -1); //-1 parameter indicates number of days you wish to add/deduct,
    Date yesterday = c.getTime();



notez.setDate(yesterday);

LocalDate

A java.sql.Date 表示仅日期值,没有时间和时区。与不幸命名的 java.util.Date 不同,它代表日期和时间。

合适的 Joda-Time class 应该是 LocalDate

虽然 LocalDate 不存储时区,但时区对于确定“今天”至关重要。巴黎的午夜刚过,在蒙特利尔仍然是“昨天”。

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
LocalDate today = LocalDate.now( zone );
LocalDate yesterday = today.minusDays( 1 );

转换为 java.sql 类型。 LocalDate::toString 方法根据 ISO 8601 标准 YYYY-MM-DD 生成格式文本。对于恰好与 java.sql.Date.valueOf 方法预期的 SQL 格式相同的仅限日期的值。

java.sql.Date sqlDate = java.sql.Date.valueOf( yesterday.toString() );

顺便说一下……如果您使用 Java 8 及更高版本中内置的 java.time 框架而不是 Joda-Time,代码将与此处显示的几乎相同。 Joda-Time 的开发者要求我们在方便时尽快迁移到 java.time。