如何将系统更改号码(SCN)转换为Java中的日期?

问题描述:

Oracle数据库中,你可以发现,当你表是使用如何将系统更改号码(SCN)转换为Java中的日期?

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应用程序中,我想编写得到String和返回Date的函数。

事情是这样的:

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

所以,我想我写在Java中SCN_TO_TIMESTAMP功能。

我该怎么做?

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

+0

阅读关于simpledateformat – Jens

+0

你想从'01-AUG-17 05.29.54.000000000 PM'或从'268908318'得到一个日期吗? – 2017-08-03 15:51:17

+0

如果你想从SCN号码(268908318)得到日期,我恐怕这是不可能的。 SCN号码[在oracle内部](https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm#BABFAFIC),并且Java没有办法找到相应的日期(唯一的方式当然是查询数据库) – 2017-08-03 16:08:47

所以,感谢@Hugo我们知道答案。由于它是内部的oracle编号,因此无法将SCN编号(268908318)转换为Java中的Date。你只能通过查询数据库来完成。

您可以使用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"使用的方法将返回以下日期:

周二8月1日5时29分54秒CEST 2017年