Java 根据年、月、日和时间创建日期对象
是否可以从年、月、日和时间创建Java 根据年、月、日和时间创建日期对象,java,date,Java,Date,是否可以从年、月、日和时间创建java.util.Date对象 我正在使用以下代码: private Date convertToDate(LocalTime time) { @SuppressWarnings("deprecation") Instant instant = time.atDate(LocalDate.of(date.getYear(), date.getMonth(), date.getDay())).atZone(ZoneId.syst
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时间
是例如08:00
则创建日期是Mon-Sep 03 08:06:32 CET 115
您可以尝试使用Calendar类
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();
您可以尝试使用Calendar类
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();
您使用错误:
返回一个值,该值是从年份中减去1900的结果
包含或开始于由该符号表示的时间瞬间的
日期对象,在本地时区中解释
getYear()
的偏移量为1900,使用LocalDate.of(年、月、日)
时必须添加该偏移量。这就是为什么你计算的瞬间的年份是115
Instant instant = time.atDate(LocalDate.of(date.getYear() + 1900,
date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
您使用错误:
返回一个值,该值是从年份中减去1900的结果
包含或开始于由该符号表示的时间瞬间的
日期对象,在本地时区中解释
getYear()
的偏移量为1900,使用LocalDate.of(年、月、日)
时必须添加该偏移量。这就是为什么你计算的瞬间的年份是115
Instant instant = time.atDate(LocalDate.of(date.getYear() + 1900,
date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
如果要设置日期和时间,请使用
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());
}
}
如果要设置日期和时间,请使用
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());
}
}
下面是一个替代解决方案,使用一行程序,而不使用不推荐的方法:
return Date.from(date.toInstant()
.atZone(ZoneId.systemDefault())
.with(time)
.toInstant());
下面是一个替代解决方案,使用一行程序,而不使用不推荐的方法:
return Date.from(date.toInstant()
.atZone(ZoneId.systemDefault())
.with(time)
.toInstant());
“date”变量的类型是什么?为什么它不是本地变量?应该是“时间”吗?什么是“日期”?代码的目的是什么,对meThis没有任何意义此方法是时间记录应用程序的一部分,其中日期是类属性的一部分
date
是一个java.util.date
time
是时间记录中的时间,但我需要它作为java.util.Date
@Jbartmann请清理您的代码示例,而不是在注释中解释。如果date
是一个java.util.date,您可以通过将其作为第二个声明参数传递给我们来解释它。在这里发布获取JVM当前默认时区的结果可能有助于解释06:32的奥秘。调用和。日期变量的类型是什么?为什么它不是本地变量?应该是“时间”吗?什么是“日期”?代码的目的是什么,对meThis没有任何意义此方法是时间记录应用程序的一部分,其中日期是类属性的一部分date
是一个java.util.date
time
是时间记录中的时间,但我需要它作为java.util.Date
@Jbartmann请清理您的代码示例,而不是在注释中解释。如果date
是一个java.util.date,您可以通过将其作为第二个声明参数传递给我们来解释它。在这里发布获取JVM当前默认时区的结果可能有助于解释06:32的奥秘。打电话给我,真的吗?他使用的是本地时间(Java8?),你建议他使用日历?时间在哪里?真的吗?他使用的是本地时间(Java8?),你建议他使用日历?时间在哪里?这解决了我的问题,尽管我不知道为什么。你所做的只是在一年中增加1900,但现在6分32秒已经过去了。谢谢这是因为通过atZone
将LocalDateTime
固定到时间线中的某个瞬间会考虑到可能有一些历史时间调整操作。对于具体的解释,你可以问一个新问题。深入研究正确的程序非常耗时,但我相信会有一些专家这样做;-)这解决了我的问题,尽管我不知道为什么。你所做的只是在一年中增加1900,但现在6分32秒已经过去了。谢谢这是因为通过atZone
将LocalDateTime
固定到时间线中的某个瞬间会考虑到可能有一些历史时间调整操作。对于具体的解释,你可以问一个新问题。深入研究正确的程序非常耗时,但我相信会有一些专家这样做;-)