如何获取今天的日期并将其添加 7 天并插入到 oracle sql 中?

how to get today's date and add 7 days to it and the insert into oracle sql?

我正在开发一个程序,我想在 servlet 中检索今天的日期,然后添加一些天数,比如 7 天,最后插入到 oracle SQL 数据库中。

我正在使用准备好的语句进行调用。到目前为止,我使用以下代码获得了当前日期。

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
Date date = new Date();

如何添加 7 天,然后将其插入数据库?

获取日历实例,调用setTime,调用add,调用getTime

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#setTime%28java.util.Date%29

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#add%28int,%20int%29

或者将天数添加到您准备好的语句中...参见 This SO question 作为示例

       Calendar cal = Calendar.getInstance();
      cal.clear(Calendar.HOUR_OF_DAY);
      cal.clear(Calendar.AM_PM);
      cal.clear(Calendar.MINUTE);
      cal.clear(Calendar.SECOND);
      cal.clear(Calendar.MILLISECOND);
    int days = 7;
    // Add days
    calendar.add(Calendar.DAY_OF_MONTH, days);
    System.out.println(calendar.getTime());    

根据您的日期格式 dd/MM/yyyy,我假设您只对日期感兴趣而不是日期时间(时间戳如 dd/MM/yyyy hh:mm:ss),您可以使用 java.time 包中的新日期时间 API 在 Java 8 中轻松完成

LocalDate date = LocalDate.now();
date = date.plusDays(7);

在您的 PreparedStatement 中,您可以像这样使用 setObject

PreparedStatement ps = Connection.prepareStatement(sql);
ps.setObject(2,date); // 2 is the place holder for your date column

请注意,这些新的 类 与 String 一样是不可变的,因此对它们的任何更改都会 return 一个新对象,您需要在调用任何方法后捕获 return 值。

有关详细信息,请查看 API here

使用java.util.Calendar class获取天数(取决于您的要求)向其中添加所需的天数 天可以Day in month or day in week or day in year我觉得对你的要求days in month比较好...

java.util.Date date = new Date();
Calendar cal = Calendar.getInstance();
//date = cal.getTime();

int days = cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, days+7);
date = cal.getTime();
System.out.println(date);

您可以让 DB 为您计算并执行此操作:

PreparedStatement ps = null;
try {
    String sql = "INSERT INTO mytable (id, datecolumn) VALUES (?, trunc(?) + 7)";
    ps = myConnection.prepareStatement(sql);
    ps.setString(1, id);
    ps.setDate(2, new Date());
    // if your DB has a different timezone than your app server,
    // you should use this instead
    // ps.setDate(2, new Date(), Calendar.getInstance("<TZ of DB>"));
    ps.executeUpdate();
} finally {
    if (ps != null) {
        ps.close();
    }
}

此代码将日期值插入目标列,时间部分设置为零(使用 Oracle 的 trunc function)并且日期增加 7 天。

重要的是要注意,如果您的数据库的时区与 JVM 的时区不同,您应该使用考虑了 TZ 的 setDate 重载。

假设要添加 7 天,下面的代码片段可以工作:

      Calendar cal = Calendar.getInstance();
     //in below line of code, date is in which which you want to add 7 number of days
        cal.setTime(date);
        cal.add(Calendar.DATE, 7);
        java.util.Date utilDate = cal.getTime();
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

现在您可以在插入查询中使用 sqlDate 值。

希望对您有所帮助:)

java.time

现代方法是使用 java.time classes。问题和其他答案使用麻烦的旧旧日期时间 classes.

LocalDate

LocalDate class 表示没有时间和时区的仅日期值。

时区对于确定日期至关重要。对于任何给定时刻,日期在全球范围内因地区而异。例如,Paris France is a new day while still “yesterday” in Montréal Québec.

午夜后几分钟
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

轻松计算日期。

LocalDate weekLater = today.plusWeeks( 1 );

数据库

如果您的数据库驱动程序符合 JDBC 4.2 或更高版本,您应该能够使用 PreparedStatement::setObject 方法通过 JDBC 传递 LocalDate 对象。

myPreparedStatement.setObject( … , weekLater );

如果不是,则必须转换为旧的 java.sql.Date class。

java.sql.Date sqlDate = java.sql.Date.valueOf( weekLater );
myPreparedStatement.setDate( … , sqlDate );

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Joda-Time project, now in maintenance mode,建议迁移到java.time。

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

从哪里获得java.time classes?

  • Java SE 8 and SE 9 及以后
    • 内置。
    • 标准 Java API 的一部分,带有捆绑实施。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 and SE 7
  • Android
    • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(上面提到的)。
    • 参见

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.