如何在Java中将TemporalType.TIMESTAMP转换为Date()?

时间:2013-01-14 22:50:54

标签: java sql timestamp

我有@Entity

@Entity
@Table(name = "variable")
@XmlRootElement
public class Variable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(unique = true, nullable = false)
    private String name;

    @Column
    @Enumerated(EnumType.STRING)
    private VariableType type;

    @Column(nullable = false)
    private String units;

    @Column
    private String description;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_on", nullable = false)
    private Date createdOn;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "retired_on", nullable = true)
    private Date retiredOn;

    @Column(nullable = false)
    private boolean core;
}

当我使用VariableManager插入数据时,它在数据库

中正确显示
variableCrudService.create(new Variable(name, type, units, description, new Date(), core));

我可以在日志中看到

 added variable id=13 name=v4 type=String units=u4 description=created with web service createdOn=2013-01-14 14:43:57.0 retiredOn=null core=true

并在数据库中 MySQL的> select * from variable;

+----+------+------------+-------+--------------------------+---------------------+------------+------+
| id | name | type       | units | description              | created_on          | retired_on | core |
+----+------+------------+-------+--------------------------+---------------------+------------+------+
|  1 | v1   | Double     | u1    | created via migration    | 2013-01-14 13:15:19 | NULL       |    1 |
|  2 | v2   | String     | u2    | created via migration    | 2013-01-14 13:15:19 | NULL       |    1 |
|  3 | v3   | BigDecimal | u3    | created via migration    | 2013-01-14 13:15:19 | NULL       |    0 |
| 12 | v4   | String     | u4    | created with web service | 2013-01-14 14:41:31 | NULL       |    1 |
+----+------+------------+-------+--------------------------+---------------------+------------+------+
4 rows in set (0.00 sec)  

但是当我使用curl测试时,我得到了奇怪格式的时间戳

[
    {
        "core": true, 
        "createdOn": 1358198119000, 
        "description": "created via migration", 
        "id": 1, 
        "name": "v1", 
        "retiredOn": null, 
        "type": "Double", 
        "units": "u1"
    }, 
    {
        "core": true, 
        "createdOn": 1358198119000, 
        "description": "created via migration", 
        "id": 2, 
        "name": "v2", 
        "retiredOn": null, 
        "type": "String", 
        "units": "u2"
    }, 
    {
        "core": false, 
        "createdOn": 1358198119000, 
        "description": "created via migration", 
        "id": 3, 
        "name": "v3", 
        "retiredOn": null, 
        "type": "BigDecimal", 
        "units": "u3"
    }, 
    {
        "core": true, 
        "createdOn": 1358203437000, 
        "description": "created with web service", 
        "id": 13, 
        "name": "v4", 
        "retiredOn": null, 
        "type": "String", 
        "units": "u4"
    }
]

这里到底发生了什么?我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为日期值是正确的,但可能不是您想要的格式。您可以尝试创建自定义日期适配器,以确保JAXB以正确的格式解组值。看看这个:jaxb unmarshal timestamp