不兼容的类型:字符串无法转换为Date

时间:2018-03-21 06:46:13

标签: java date datetime time

我尝试存储当前时间和日期,但收到以下错误:

  

不兼容的类型:字符串无法转换为日期

这是代码:

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;
}

3 个答案:

答案 0 :(得分:1)

您正在使用DateTimeFormatterLocalDateTime转换为String setUpdateDt。然后将该结果作为参数发送给public void setUpdateDt(Date time)

String

问题是您发送的是Date而不是Date

仅供参考:你在这里混合时间技术。 LocalDateTImeLocalDateTime是两个不同的时间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());


    }