如何将日期和 sql 时间组合成 java 中的单个日期时间?
how can you combine date and sql time into a single date time in java?
使用 java 日历如何组合开始日期、日期和开始时间?
例如:
如果开始日期是 9/8/2020。日期是 2,开始时间是 8:00 AM 那么我们如何获得一个 java 日期,即 9/9/2020 8:00 AM。这是我不成功的尝试。
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()
}
感谢您的帮助。
您正在呼叫 date.setTime(startDate)
和 date.setTimeInMillis(startTime.getTime())
。第二种方法是覆盖第一种方法中设置的时间。您应该创建 2 个单独的日历实例。
这是实现此目标的方法
- 为
startDay
和 startTime
创建单独的 Calendar
个实例
- 从 #1 中创建的单独
Calendar
个对象构建一个新的 Calendar
对象,并根据要求添加 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);
}
}
输出:
date : Tue Sep 08 01:01:01 IST 2020
注意:我建议使用 java.time.*
包而不是 java.util.*
。为什么?检查 this。但这仅在 java 8 中可用。(不过,您可以在 8 以下的版本中使用 joda time)。
编辑:移动 Ole V.V. 的评论来回答。
对于 Java 7,我建议使用 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);
}
使用 java 日历如何组合开始日期、日期和开始时间?
例如:
如果开始日期是 9/8/2020。日期是 2,开始时间是 8:00 AM 那么我们如何获得一个 java 日期,即 9/9/2020 8:00 AM。这是我不成功的尝试。
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()
}
感谢您的帮助。
您正在呼叫 date.setTime(startDate)
和 date.setTimeInMillis(startTime.getTime())
。第二种方法是覆盖第一种方法中设置的时间。您应该创建 2 个单独的日历实例。
这是实现此目标的方法
- 为
startDay
和startTime
创建单独的 - 从 #1 中创建的单独
Calendar
个对象构建一个新的Calendar
对象,并根据要求添加day
Calendar
个实例
完整代码如下:
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);
}
}
输出:
date : Tue Sep 08 01:01:01 IST 2020
注意:我建议使用 java.time.*
包而不是 java.util.*
。为什么?检查 this。但这仅在 java 8 中可用。(不过,您可以在 8 以下的版本中使用 joda time)。
编辑:移动 Ole V.V. 的评论来回答。
对于 Java 7,我建议使用 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);
}