在java中,如何将日期和sql时间组合成一个日期时间?

s4n0splo  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(564)

这个问题在这里已经有答案了

如何将java.sql.date和java.sql.time合并到java.util.date(3个答案)
将java.util.date与java.sql.time合并(7个答案)
4个月前关门了。
使用java日历如何组合开始日期、日期和开始时间?
例如:
如果开始日期是2020年9月8日。日期是2,开始时间是上午8:00,那么我们如何获得java日期是2020年9月9日上午8:00。这是我失败的尝试。

def startDateTime(Date startDate, int day, java.sql.Time startTime){    

        def date
        date = Calendar.getInstance()
        date.setTime(startDate)

        //adding day. since day 1 is the first day we need to add day - 1
        date.add(Calendar.DATE, day - 1)   
        // setting the time from startTime
        date.setTimeInMillis(startTime.getTime())

        return date.getTime()

    }

谢谢你的帮助。

6yt4nkrj

6yt4nkrj1#

你在打电话吗 date.setTime(startDate) 以及 date.setTimeInMillis(startTime.getTime()) . 第二个方法正在重写第一个方法中设置的时间。您应该创建两个单独的日历示例。
下面是你如何做到这一点
创建单独的 Calendar 的示例 startDay 以及 startTime 构建一个新的 Calendar 对象从单独 Calendar 在#1中创建的对象添加(&A) day 按要求
完整代码如下:

import java.sql.Time;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

public class ProofOfConcept {

    public static void main(String[] args) {
        int day = 2;

        Time startTime = new Time(1, 1, 1);
        Calendar timeCalendar = Calendar.getInstance();
        timeCalendar.setTime(startTime);

        Date startDate = new Date();
        Calendar startDateCalendar = Calendar.getInstance();
        startDateCalendar.setTime(startDate);

        /* Only java 8 and above
        LocalDateTime localDateTime = LocalDateTime.of(startDateCalendar.get(Calendar.YEAR), startDateCalendar.get(Calendar.MONTH) + 1, startDateCalendar.get(Calendar.DAY_OF_MONTH),
                timeCalendar.get(Calendar.HOUR), timeCalendar.get(Calendar.MINUTE), timeCalendar.get(Calendar.SECOND));
        localDateTime = localDateTime.plusDays(day);
        System.out.println("localDateTime : " + localDateTime);
        Date dateFromLocalDateTime = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        System.out.println("dateFromLocalDateTime : " + dateFromLocalDateTime);*/

        Calendar result = Calendar.getInstance();
        result.set(startDateCalendar.get(Calendar.YEAR), startDateCalendar.get(Calendar.MONTH), startDateCalendar.get(Calendar.DAY_OF_MONTH) + 2,
                timeCalendar.get(Calendar.HOUR), timeCalendar.get(Calendar.MINUTE), timeCalendar.get(Calendar.SECOND));

        Date date = result.getTime();
        System.out.println("date : " + date);
    }

}

输出:
日期:2020年9月8日星期二01:01:01
注意:我建议使用 java.time.* 包裹超过 java.util.* . 为什么?看看这个。但这只在Java8中可用(不过,在8)以下的版本中可以使用joda time。
编辑:移动ole v.v.的评论以回答。
对于Java7,我建议使用 java.time ,现代的java日期和时间api,通过backport,threeten backport。

static LocalDateTime startDateTime(Date startDate, int day, java.sql.Time startTime) {
    LocalTime startLocalTime = DateTimeUtils.toLocalTime(startTime);
    return DateTimeUtils.toInstant(startDate)
            .atZone(ZoneId.systemDefault())
            .toLocalDate()
            .plusDays(day - 1)
            .atTime(startLocalTime);
}

相关问题