【问题标题】:How do I convert a Date in milliseconds into Date like in the database?如何以毫秒为单位将日期转换为数据库中的日期?
【发布时间】:2013-01-17 22:21:41
【问题描述】:

我有一个带有字段的@Entity

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

将时间戳保存为

+----+------+------------+-------+--------------------------+---------------------+---------------------+------+
| 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 |
| 27 | v4   | String     | u4    | created with web service | 2013-01-15 10:37:30 | 2013-01-15 11:27:48 |    1 |
+----+------+------------+-------+--------------------------+---------------------+---------------------+------+

当我检索数据时,我得到 Date 对象,其值类似于

"createdOn": 1358198119000,
"createdOn": 1358198119000,
"createdOn": 1358198119000,
"createdOn": 1358275050000, 

如何将它们转换回带有时间戳的日期,例如 '2013-01-15 10:37:30' 而不是数字 1358198119000

【问题讨论】:

  • 不清楚你的意思。如果您要返回 Date 对象,那已经是正确的了,不是吗?
  • 您真的只是想知道如何将Date 转换为字符串吗?如果是这样,数据库端真的无关紧要。你看过 java.text.SimpleDateFormat 吗?
  • @daydreamer 你能告诉我们从数据库获取数据的sql querie吗?也许您可以使用DATE_FORMAT(date,format) 进行一些更改
  • 你真的应该给我们一个关于你如何使用日期对象及其值的提示。在回答的 cmets 中,您说您需要一个日期对象(您已经得到了),并且您谈到了一种特定的格式(YYYY-MM-DD ...),这是一个简单的演示问题。我不清楚你的问题到底是什么。您是在询问如何将时间戳(以毫秒为单位)转换为日期对象吗?!

标签: java date timestamp


【解决方案1】:

这个值只是自纪元以来的毫秒数,它们仍然代表正确的 Date 对象。你的“时间戳”意味着什么?作为Timestamp java 类实例还是只是有效格式化?

对于第一个问题,yes 的回答可能会有所帮助:

java.sql.Timestamp timestamp = new java.sql.Timestamp(createdOn.getTime());

这样的事情可以帮助回答“是”的第二个问题:

SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestampedDate = formater.format(createdOn);

【讨论】:

  • 我想我明白了,但是format 正在返回String,但是对于我的API 我需要Date,我不确定什么是最好的方法来做到这一点
  • 但是你已经得到了Date 对象,不是吗?日期对象数据模型是 long 值,表示自纪元时间以来经过的毫秒数。
  • @daydreamer 您可以从字符串中解析日期并创建一个日期对象。喜欢Date date = formater.parse(timestampedDate )
  • 或者,如果您的毫秒数为long,只需通过调用Date d = new Date(miliseconds_as_long_value) 创建新的Date 对象。有什么建议 - 我的或其他任何人适合您的问题,或者我们只是遗漏了什么?
  • @emka86 如果他从 DB 中获取数据,那么他也可以在 sql 中使用 DATE_FORMAT。
【解决方案2】:

将您的 TemporalType 更改为 DATE

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多