【问题标题】:Converting DateFormat into Date将日期格式转换为日期
【发布时间】:2018-02-12 13:46:03
【问题描述】:

我有这个代码。游戏类中的数据是DateFormat,它需要是DateFormat,但是在sql中我需要设置Date。如何在这行代码中将 DateFormat 转换为 Date?

    try{

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost/internacionalizacija?useUnicode=true&characterEncoding=UTF-8", "root", "");

        String sql = "INSERT INTO utakmice(tim1, tim2, datum) VALUES(?,?,?)";
        PreparedStatement stmt = conn.prepareStatement(sql);
        //stmt.execute("set names 'utf8'");

        stmt.setString(1, utakmice.getTim1());
        stmt.setString(2, utakmice.getTim2());
        stmt.setDate(3, utakmice.getDatum());

游戏类:

public class Games {
    private String tim1;
    private String tim2;
    private DateFormat datum;

    public Utakmice(String tim1, String tim2, DateFormat datum) {
        this.tim1 = tim1;
        this.tim2 = tim2;
        this.datum = datum;
    }


    public void setTim1(String tim1) {
        this.tim1 = tim1;
    }

    public String getTim1() {
        return tim1;
    }

    public void setTim2(String tim2) {
        this.tim2 = tim2;
    }

    public String getTim2() {
        return tim2;
    }

    public void setDatum(DateFormat datum) {
        this.datum = datum;
    }

    public DateFormat getDatum() {
        return datum;
    }
}

我从 JFrame 获取日期,这里是代码:

private void btnSpremiActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String tim1 = txtTim1.getText();
    String tim2 = txtTim2.getText();
    DateFormat datum = txtDate.getDateFormat();

    Utakmice utakmice = controll.kreirajUtakmice(tim1, tim2, datum);
    controll.spremiUtakmice(utakmice);
}   

【问题讨论】:

  • 您应该尝试展示一些输入/输出示例。像这样不清楚。请参阅How to Ask 以稍微改善您的问题。请注意,DateFormat 只是一种用于从Date 或相反创建String 的模式。这不是Date它不保存任何时间数据
  • 提示:需要DateFormat 类型的对象来将字符串解析为Date 对象。那么您的格式化日期字符串在哪里?
  • 因为这是一个DatePicker,你只是使用了错误的getter来选择在那个组件中挑选的Date,你得到了它的格式化程序。不幸的是,我不知道您使用的是什么组件(我认为 Swing 没有提供)。您能否显示导入此 DatePicker 类的 import 行? (或者给我们使用的框架)。 PS:我会在答案中添加一些DateFormat 用法示例,但如果没有Date 信息,您将无法使用它。
  • @AxelH 你的意思是:txtDate = new datechooser.beans.DateChooserCombo(); ?!我用DateChoser.jar
  • @KatjaBilobrk 我的错,我应该早点看到PreparedStatement 错误......这是一个不同的问题。我们通常使用java.util.Date(嗯,使用过),但是从SQL 中,有一个java.sql.Date,相同的“名称”但不同的实例。您可以在that thread 上查看如何从java.util.Date 创建java.sql.Date。由于这是一个不同的问题,我将保持我的答案不变,这与最初的问题相去甚远。

标签: java sql date


【解决方案1】:

您目前正在从JFrame 中的日期选择器获取DateFormat。你只是使用了错误的getter,你应该找到一个getDate()getSelectedDate(),...返回一个DateLocalDate,...

您正在使用DateChooserCombo。还没有找到 javadoc,但我发现的 source code 表明它提供了

public Calendar getSelectedDate() { 
    return chooser.getSelectedDate(); 
} 

它返回一个Calendar,你可以使用Calendar.getTime()从中得到一个Date

因此,不要使用DateFormat datum,而是将其更新为Date datum,并将您的JFrame 更改为

Date datum = txtDate.getSelectedDate().getTime(); //Might be null if nothing selected !!

还有豆子:

public class Games{
    private String tim1;
    private String tim2;
    private Date datum; //CHANGED HERE

    //getter and setter
}

仅供参考:

目前,恢复的DateFormat 用于使用Date.format(Date)Date.parse(String) 创建或字符串化Date

这是一个使用SimpleDateFormat 的简单示例(DateFormat 的子类,允许创建自己的模式,请参阅文档了解更多信息)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//Convert a String into a Date (matching the pattern above
Date d = sdf.parse("2017-09-20");
//Convert a Date into a String(matching the pattern above
String s = sdf.format(d);

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2011-08-13
    • 2016-12-02
    • 1970-01-01
    • 2012-06-05
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多