微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Java中将日期和sql时间合并为单个日期时间?

如何解决如何在Java中将日期和sql时间合并为单个日期时间?

使用Java日历如何将开始日期,日期和开始时间结合起来?

例如:

如果开始日期是2020年9月8日。日期是2,开始时间是8:00 AM,那么我们如何获得9/9/2020 8:00 AM的Java日期。这是我失败的尝试。

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()

    }

感谢您的帮助。

解决方法

您正在呼叫labelsdate.setTime(startDate)。第二种方法将覆盖第一种方法中设置的时间。您应该创建2个单独的Calendar实例。

这是您如何实现这一目标

  1. date.setTimeInMillis(startTime.getTime())Calendar创建单独的startDay实例
  2. 从#1中创建的单独startTime对象中构造一个新的Calendar对象,并根据要求添加Calendar

这是完整的代码:

day

输出:

date:星期二Sep 08 01:01:01 IST 2020

注意:我建议在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.SECOND)); Date date = result.getTime(); System.out.println("date : " + date); } } 上使用java.time.*软件包。为什么?选中this。但这仅在Java 8中可用。(不过,您可以在8以下的版本中使用joda time)。


编辑:将Ole V.V. 的评论移至答案。

对于Java 7,我建议通过反向端口ThreeTen Backport使用现代Java日期和时间API java.util.*

java.time

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。