如何将系统更改号码(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)获取日期。
答
所以,感谢@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年
阅读关于simpledateformat – Jens
你想从'01-AUG-17 05.29.54.000000000 PM'或从'268908318'得到一个日期吗? – 2017-08-03 15:51:17
如果你想从SCN号码(268908318)得到日期,我恐怕这是不可能的。 SCN号码[在oracle内部](https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm#BABFAFIC),并且Java没有办法找到相应的日期(唯一的方式当然是查询数据库) – 2017-08-03 16:08:47