【问题标题】:How to convert system change number (SCN) to Date in Java?如何在 Java 中将系统更改号 (SCN) 转换为日期?
【发布时间】:2017-08-03 14:48:39
【问题描述】:

在 Oracle DB 中,您可以通过使用了解上次更新表的时间

SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) FROM myTable; 

(see this question)

我从这个查询中得到01-AUG-17 05.29.54.000000000 PM

如果你执行这个查询

SELECT MAX(ora_rowscn) FROM myTable;

您将获得系统更改号 (SCN) 格式的结果。我从这个查询中得到268908318

在我的 Java 应用程序中,我想编写获取字符串并返回日期的函数。

类似这样的:

public Date getDateFromSCNString(String scnString) {...}

所以,我想用 Java 编写我的 SCN_TO_TIMESTAMP 函数。

我该怎么做?

更新:我想从 SCN 号 (268908318) 中获取日期。

【问题讨论】:

  • 了解 simpledateformat
  • 您想从01-AUG-17 05.29.54.000000000 PM 还是从268908318 获取日期?
  • 如果要从SCN号(268908318)中获取日期,恐怕不行。 SCN号是internal to oracle,Java没有办法找到对应的日期(唯一的办法当然是查询数据库)
  • 如果您想从 01-AUG-17 05.29.54.000000000 PM 获取日期,您可以在 stackoverflow(或 google,它可能会将您发送到 stackoverflow 链接)进行搜索,因为有人问过这个问题几次。另外,看看datetime-parsingdate-parsing 标签。如果您使用的是 Java 8,我还建议您使用 oracle's date/time tutorial
  • 感谢您的回答,@Hugo!我真的很想从268908318 获取日期。如果我理解正确,没有办法做到这一点。好的,我会尝试另一种方式。如果你不介意我会用你的 cmets 写这个问题的答案。再次感谢您!

标签: java sql string oracle timestamp


【解决方案1】:

您可以使用SimpleDateFormat 设置您想要输入的自定义格式,并像这样编写您的方法:

public Date getDateFromSCNString(String scnString) {
    DateFormat formatter = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.SSS a", Locale.US);
    return formatter.parse(scnString);
}

这将正确地解析字符串到日期。

如果您使用"01-AUG-17 05.29.54.000000000 PM" 作为输入,该方法将返回以下日期:

2017 年 8 月 1 日星期二 05:29:54 CEST

【讨论】:

    【解决方案2】:

    所以,感谢@Hugo,我们知道答案了。在 Java 中无法将 SCN 编号 (268908318) 转换为 Date,因为它是内部 oracle 编号。您只能通过查询数据库来做到这一点。

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2013-07-06
      相关资源
      最近更新 更多