如何在ActiveJDBC中将ISO 8601日期转换为DateTime类型?

时间:2018-03-07 23:26:38

标签: java activejdbc

toJson方法为结果提供格式为 ISO 8601 的日期类型。

使用控制台输出时,someEntityInstance.toString()方法会生成:

{Valid=true, Activation_Date=2018-02-11 05:00:00.0, Creation_Date=2018-02-11 05:00:00.0}

但是someEntityInstance.toJson(false)日期转换为ISO 8601:

{Valid=true, Activation_Date=2018-02-11T05:00:00Z, Creation_Date=2018-02-11T05:00:00.0Z}

当我尝试保存对象时,它会生成异常:

"com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2018-02-11T05:00:00Z' for column 'Activation_Date'

我需要做什么才能自动将生成的日期转换为标准DateTime格式?

1 个答案:

答案 0 :(得分:0)

ActiveJDBC是Pass-through framework。这意味着您在模型上设置的 数据类型

model.set("activation_date", date); 

以及您从数据库中读取的内容:

YourModel m = YourModel.findById(1);
Object activationCode = m.get("activation_code"); 

可以有所不同。

每当您从数据库中读取内容时,您的属性都会包含驱动程序返回的类型。但是,当您设置值时,也会设置类型,并且由驱动程序将您设置的类型转换为基础数据库类型。

我觉得你拥有的两个例子来自你模型的不同生命周期。为了防止这种情况,您可以编写类型化的setter:

public class YourModel extends Model{
    public YourModel setActivactionDate(java.sql.Timestamp t){
      set("activation_date", t); 
    }
}

更新:toJson方法确实转换为ISO格式: https://github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/Model.java#L1047

您可以做的是添加日期或时间戳转换器:

http://javalite.io/data_conversions#converters