无法使用 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。
我使用 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。