我尝试存储当前时间和日期,但收到以下错误:
不兼容的类型:字符串无法转换为日期
这是代码:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
time.setUpdateDt(dtf.format(now));
public Date getUpdateDt() {
return time;
}
public void setUpdateDt(Date time) {
this.time = time;
}
答案 0 :(得分:1)
您正在使用DateTimeFormatter
将LocalDateTime
转换为String
setUpdateDt
。然后将该结果作为参数发送给public void setUpdateDt(Date time)
。
String
问题是您发送的是Date
而不是Date
。
仅供参考:你在这里混合时间技术。 LocalDateTIme
和LocalDateTime
是两个不同的时间API,您不应该混用它们。如果您希望POJO存储日期,请将其存储为public void setUpdateDt(LocalDateTime time)
。
Date
如果您真的希望从LocalDateTime
获取objShell.ShellExecute "xyz.exe", "xyz.file", "", "open", 1
,请查看以下答案:DateTimeFormatter.format
答案 1 :(得分:0)
dtf.format(now)
将返回String
。您正在尝试将此值传递给接受Date
对象的setter,从而导致出现不兼容的类型错误。而不是time.setUpdateDt(dtf.format(now));
您可以使用java.util.Date
类创建新的Date
,如下所示 -
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
time.setUpdateDt(dtf.format(now));
public Date getUpdateDt() {
return time;
}
public void setUpdateDt(Date time) {
this.time = time;
}
或者,如果您想使用现有的LocalDateTime
,可以将其转换为Date
-
LocalDateTime now = LocalDateTime.now();
Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
time.setUpdateDt(dtf.format(date));
答案 2 :(得分:0)
dtf.format(now)返回一个字符串。不是约会对象。
如果您只想将LocalDate转换为Date,则可以使用此方法:
LocalDateTime now = LocalDateTime.now();
Date yourDate = Date.from(datetime.atZone(ZoneId.systemDefault()).toInstant());
但是,如果您仍然需要解析字符串,则可以注入解析器并在类中指定日期对象。
例如:
public class Time {
Date time;
public Date getUpdateDt() {
return time;
}
public void setUpdateDt(Date time) {
this.time = time;
}
//this method will accept a string and inject a date format parser
public void setUpdateDt(String timeStr,DateTimeFormatter dtf) {
LocalDateTime datetime =LocalDateTime.parse(timeStr, dtf);
this.time = Date.from(datetime.atZone(ZoneId.systemDefault()).toInstant());
}
public static void main(String args[]) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
Time time = new Time();
time.setUpdateDt(dtf.format(now),dtf);
System.out.println(time.getUpdateDt());
}