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
格式?
答案 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
您可以做的是添加日期或时间戳转换器: