📄 oracletimestampformat.java
字号:
/***************************************************************************** SQLJEP - Java SQL Expression Parser 0.2 November 1 2006 (c) Copyright 2006, Alexey Gaidukov SQLJEP Author: Alexey Gaidukov SQLJEP is based on JEP 2.24 (http://www.singularsys.com/jep/) (c) Copyright 2002, Nathan Funk See LICENSE.txt for license information.*****************************************************************************/package com.meidusa.amoeba.sqljep.function;import java.util.*;import java.text.*;import static java.util.Calendar.*;import com.meidusa.amoeba.sqljep.function.OracleDateFormat;import com.meidusa.amoeba.sqljep.function.OracleTimeFormat;public class OracleTimestampFormat extends Format { private static final String PATTERN_EXCEPTION = "Wrong pattern"; private static final String FORMAT_EXCEPTION = "Wrong pattern"; private static final String NOT_IMPLIMENTED_EXCEPTION = "Not implimented"; private static final String BAD_INPUT_PATTERN = "Format code cannot appear in date input format"; private static final String BAD_HH12 = "Hour must be between 1 and 12"; protected static final Hashtable<String, ArrayList<Object>> formatsCache = new Hashtable<String, ArrayList<Object>>(); protected static final ArrayList<DATE> dateSymbols = new ArrayList<DATE>(); protected static final ArrayList<DATE> timeSymbols = new ArrayList<DATE>(); protected ArrayList<Object> format = null; protected Calendar cal; protected DateFormatSymbols symb; public static abstract class DATE { abstract public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException; abstract public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException; public boolean equals(Comparable<?> obj) { if (obj == null) { return false; } return (obj.getClass() == this.getClass()); } }; public static abstract class TIME extends DATE { }; // ERA public static final class fBC extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { String[] eras = symb.getEras(); int era = cal.get(ERA); str.append(eras[era]); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { String[] eras = symb.getEras(); int idx = pos.getIndex(); for (int i = 0; i < eras.length; i++) { int len = eras[i].length(); if (source.regionMatches(false, idx, eras[i], 0, len)) { pos.setIndex(idx+len); cal.set(ERA, i); return; } } throw new java.text.ParseException("", 0); } public String toString() { return "BC"; } }; static { OracleTimestampFormat.dateSymbols.add(new fBC()); } public static final class fAD extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { String[] eras = symb.getEras(); int era = cal.get(ERA); str.append(eras[era]); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { String[] eras = symb.getEras(); int idx = pos.getIndex(); for (int i = 0; i < eras.length; i++) { int len = eras[i].length(); if (source.regionMatches(true, idx, eras[i], 0, len)) { pos.setIndex(idx+len); cal.set(ERA, i); return; } } throw new java.text.ParseException("", 0); } public String toString() { return "AD"; } }; static { OracleTimestampFormat.dateSymbols.add(new fAD()); } public static final class BdCd extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int era = cal.get(ERA); str.append(era == GregorianCalendar.BC ? "b.c." : "a.d."); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int i = pos.getIndex(); String t = source.substring(i, i+4); if (toString().equals(t.toUpperCase())) { pos.setIndex(i+4); cal.set(ERA, GregorianCalendar.BC); } else if (t.toUpperCase().equals("A.D.")) { pos.setIndex(i+4); cal.set(ERA, GregorianCalendar.AD); } else { throw new java.text.ParseException("", 0); } } public String toString() { return "B.C."; } }; static { OracleTimestampFormat.dateSymbols.add(new BdCd()); } public static final class AdDd extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int era = cal.get(ERA); str.append(era == GregorianCalendar.AD ? "a.d." : "b.c."); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int i = pos.getIndex(); String t = source.substring(i, i+4); if (toString().equals(t.toUpperCase())) { pos.setIndex(i+4); cal.set(ERA, GregorianCalendar.AD); } else if (t.toUpperCase().equals("B.C.")) { pos.setIndex(i+4); cal.set(ERA, GregorianCalendar.BC); } else { throw new java.text.ParseException("", 0); } } public String toString() { return "A.D."; } }; static { OracleTimestampFormat.dateSymbols.add(new AdDd()); } // CENTURE public static final class SCC extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String cc = Integer.toString((year/100)*100); if (cc.length() == 1) { str.append('0'); } str.append(cc); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(BAD_INPUT_PATTERN, 0); } public String toString() { return "SCC"; } }; static { OracleTimestampFormat.dateSymbols.add(new SCC()); } public static final class CC extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String cc = Integer.toString(Math.abs((year/100)*100)); if (cc.length() == 1) { str.append('0'); } str.append(cc); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(BAD_INPUT_PATTERN, 0); } public String toString() { return "CC"; } }; static { OracleTimestampFormat.dateSymbols.add(new CC()); } // YEAR public static final class SYYYY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(year); for (int i = y.length(); i < 4; i++) { str.append('0'); } str.append(y); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { boolean negate = false; if (getSign(source, pos) == '-') { negate = true; } int year = getNumber(source, pos, 4); if (negate) { year = -year; } cal.set(YEAR, year); } public String toString() { return "SYYYY"; } }; static { OracleTimestampFormat.dateSymbols.add(new SYYYY()); } public static final class YYYY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(Math.abs(year)); for (int i = y.length(); i < 4; i++) { str.append('0'); } str.append(y); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int year = getNumber(source, pos, 4); cal.set(YEAR, year); } public String toString() { return "YYYY"; } }; static { OracleTimestampFormat.dateSymbols.add(new YYYY()); } public static final class YcYYY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(year/1000); str.append(y+','); String yyy = Integer.toString(year-(year/1000)*1000); for (int i = y.length(); i < 3; i++) { str.append('0'); } str.append(yyy); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { getNumber(source, pos, 1); int i = pos.getIndex(); String d = source.charAt(i-1)+""; int year; if (source.charAt(i) == ',') { ++i; pos.setIndex(i); getNumber(source, pos, 3); d += source.substring(i, pos.getIndex()); year = Integer.valueOf(d); } else { pos.setIndex(i-1); year = getNumber(source, pos, 4); } cal.set(YEAR, year); } public String toString() { return "Y,YYY"; } }; static { OracleTimestampFormat.dateSymbols.add(new YcYYY()); } public static final class YYY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(year - (year/1000)*1000); for (int i = y.length(); i < 3; i++) { str.append('0'); } str.append(y); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int year = getNumber(source, pos, 3); int y = (cal.get(YEAR)/1000)*1000; cal.set(YEAR, y+year); } public String toString() { return "YYY"; } }; static { OracleTimestampFormat.dateSymbols.add(new YYY()); } public static final class YY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(year - (year/100)*100); for (int i = y.length(); i < 2; i++) { str.append('0'); } str.append(y); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int year = getNumber(source, pos, 2); int y = (cal.get(YEAR)/100)*100; cal.set(YEAR, y+year); } public String toString() { return "YY"; } }; static { OracleTimestampFormat.dateSymbols.add(new YY()); } public static final class Y extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int year = cal.get(YEAR); String y = Integer.toString(year - (year/10)*10); str.append(y); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int year = getNumber(source, pos, 1); int y = (cal.get(YEAR)/10)*10; cal.set(YEAR, y+year); } public String toString() { return "Y"; } }; static { OracleTimestampFormat.dateSymbols.add(new Y()); } public static final class SYEAR extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(BAD_INPUT_PATTERN, 0); } public String toString() { return "SYEAR"; } }; static { OracleTimestampFormat.dateSymbols.add(new SYEAR()); } public static final class YEAR extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(BAD_INPUT_PATTERN, 0); } public String toString() { return "YEAR"; } }; static { OracleTimestampFormat.dateSymbols.add(new YEAR()); } public static final class IYYY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public String toString() { return "IYYY"; } }; static { OracleTimestampFormat.dateSymbols.add(new IYYY()); } public static final class IY extends DATE { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { throw new java.text.ParseException(NOT_IMPLIMENTED_EXCEPTION, 0); } public String toString() { return "IY"; } }; static { OracleTimestampFormat.dateSymbols.add(new IY());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -