是否可以从年,月,日和时间创建java.util.Date
对象?
我正在使用此代码:
private Date convertToDate(LocalTime time)
{
@SuppressWarnings("deprecation")
Instant instant = time.atDate(LocalDate.of(date.getYear(),
date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
return Date.from(instant);
}
我面临的问题是这段代码总是给我的时间增加6分32秒
如果我的LocalTime time
是例如08:00
创建的日期为Mon Sep 03 08:06:32 CET 115
。
答案 0 :(得分:3)
您错误地使用Date#getYear
:
返回一个值,该值是从年份中减去1900的结果 包含或以此为代表的时刻开始 日期对象,在本地时区中解释。
getYear()
的偏移量为1900,使用LocalDate.of(year, month, day)
时必须添加。这就是为什么计算出的瞬发年份是115。
Instant instant = time.atDate(LocalDate.of(date.getYear() + 1900,
date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
答案 1 :(得分:1)
您可以尝试使用日历类
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();
答案 2 :(得分:1)
如果要设置日期和时间,请使用LocalDateTime
类。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Example {
public static void main(String[] args) {
long hours = TimeUnit.MILLISECONDS.convert(18, TimeUnit.HOURS);
long minutes = TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES);
long seconds = TimeUnit.MILLISECONDS.convert(42, TimeUnit.SECONDS);
long time = hours + minutes + seconds; // 6:30:42 PM
Date date = toDate(2015, 10, 13, time);
DateFormat dateFmt = new SimpleDateFormat("MMM d yyyy hh:mm:ss a");
System.out.println(dateFmt.format(date)); // Oct 13 2015 06:30:42 PM
}
public static Date toDate(int year, int month, int date, long time) {
int hour = (int) TimeUnit.MILLISECONDS.toHours(time) % 24;
int minute = (int) TimeUnit.MILLISECONDS.toMinutes(time) % 60;
int second = (int) TimeUnit.MILLISECONDS.toSeconds(time) % 60;
int milli = (int) TimeUnit.MILLISECONDS.toMillis(time);
return toDate(year, month, date, hour, minute, second, milli);
}
public static Date toDate(int year, int month, int date) {
return toDate(year, month, date, 0);
}
public static Date toDate(int year, int month, int date, int hour) {
return toDate(year, month, date, hour, 0);
}
public static Date toDate(int year, int month, int date, int hour, int minute) {
return toDate(year, month, date, hour, minute, 0);
}
public static Date toDate(int year, int month, int date, int hour, int minute, int second) {
return toDate(year, month, date, hour, minute, second, 0);
}
public static Date toDate(int year, int month, int date, int hour, int minute, int second, int milli) {
return toDate(LocalDateTime.of(year, month, date, hour, minute, second, milli));
}
public static Date toDate(LocalDateTime timestamp) {
return Date.from(timestamp.atZone(ZoneId.systemDefault()).toInstant());
}
}
答案 3 :(得分:1)
以下是使用单线程而不弃用方法的替代解决方案:
return Date.from(date.toInstant()
.atZone(ZoneId.systemDefault())
.with(time)
.toInstant());