第二天获得java.sql.Date

时间:2011-09-15 14:03:51

标签: java date

我有一个Date对象(java.sql.Date)。我需要在那天晚上12点。所以我可以创建一个从当前时间到当天结束的时间段。

如何使用java.sql.Date计算时间。请给我一个例子。

5 个答案:

答案 0 :(得分:10)

使用java.util.Calendar

java.sql.Date sqlDate = ...;
Calendar cal = Calendar.getInstance();
cal.setTime(sqlDate);
cal.add(Calendar.DAY_OF_YEAR,1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
java.sql.Date sqlTommorow = new java.sql.Date(cal.getTimeInMillis());

答案 1 :(得分:7)

理想情况下,使用Joda Time这是一个 更好的日期和时间API,而不是Java中的那个。

java.sql.Date sqlDate = ...;
LocalDate date = new LocalDate(sqlDate.getTime(), DateTimeZone.UTC);
LocalDate tomorrow = date.plusDays(1);

DateTime startOfDay = tomorrow.toDateTimeAtStartOfDay(DateTimeZone.UTC);

java.sql.Date sqlTomorrow = new java.sql.Date(startOfDay.getMillis());

请注意,这假设UTC无处不在......而我怀疑你想要午夜本地时间,在这种情况下你需要指定时区。另请注意,由于夏令时,所有时区的每天都不会出现午夜 - 上面的代码会为您提供当天的开始。

答案 2 :(得分:2)

使用以下代码:

java.sql.Date now = new java.sql.Date( new java.util.Date().getTime() );
java.sql.Date tomorrow= new java.sql.Date( now.getTime() + 24*60*60*1000);

答案 3 :(得分:1)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

另外,下面引用的是来自 Joda-Time 主页的通知:

<块引用>

请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - JDK 的核心部分,取代了该项目。

使用 java.time(现代日期时间 API)的解决方案:

  1. java.sql.Date 对象转换为 OffsetDateTime
  2. 处理获得的 OffsetDateTime 以获得具有所需值的 OffsetDateTime(或 LocalDateTimeLocalDate,根据您的数据库字段的类型)。
  3. 在 JDBC 4.2+ 中直接使用从 Step#2 获得的值。查看 this answerthis answer 以了解如何将 java.time API 与 JDBC 结合使用。

前两步演示:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class Main {
    public static void main(String[] args) {
        // A sample data for demo - you already have this object
        java.sql.Date javaSqlDate = new java.sql.Date(1234567890123L);
        
        OffsetDateTime odtFromJavaSqlDate = new java.util.Date(javaSqlDate.getTime()).toInstant()
                .atOffset(ZoneOffset.UTC);
        
        OffsetDateTime odt = odtFromJavaSqlDate.plusDays(1).with(LocalTime.MIN);
        System.out.println(odt);

        // If required, convert it to LocalDateTime
        LocalDateTime ldt = odt.toLocalDateTime();
        System.out.println(ldt);

        // If required, convert it to LocalDate
        LocalDate date = odt.toLocalDate();
        System.out.println(date);
    }
}    

输出:

2009-02-14T00:00Z
2009-02-14T00:00
2009-02-14

ONLINE DEMO

出于任何原因,如果您需要将 OffsetDateTime 的这个对象转换为 java.util.Date 的对象,您可以这样做:

java.sql.Date result = new java.sql.Date(java.sql.Date.from(odt.toInstant()).getTime());

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 4 :(得分:0)

这可能不是最好的方式,但恕我直言,它相对容易理解。 它为输入日期“now”

创建一个新的午夜java.sql.Date对象
    String DATE_FORMAT = "dd.MM.yyyy";
    //create a date sql.Date object
    java.sql.Date now = new java.sql.Date( new java.util.Date().getTime() );

    //create a date formatter
    SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMAT);
    //get the midnight date by converting the object to a String and back to a Date object
    java.util.Date midnightUtil = sf.parse( sf.format( now ) );
    //create a new java.sql.Date object and add one days worth of milliseconds;
    java.sql.Date midnight = new java.sql.Date( midnightUtil.getTime() + 86400000 );