📄 oracletimestampformat.java
字号:
int len = ampm[i].length(); if (source.regionMatches(true, idx, ampm[i], 0, len)) { pos.setIndex(idx+len); cal.set(ERA, i); return; } } throw new java.text.ParseException("", 0); } public String toString() { return "AM"; } }; static { OracleTimestampFormat.timeSymbols.add(new fAM()); } public static final class fPM extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { String[] ampm = symb.getAmPmStrings(); int am = cal.get(AM_PM); str.append(ampm[am]); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { String[] ampm = symb.getAmPmStrings(); int idx = pos.getIndex(); for (int i = 0; i < ampm.length; i++) { int len = ampm[i].length(); if (source.regionMatches(true, idx, ampm[i], 0, len)) { pos.setIndex(idx+len); cal.set(ERA, i); return; } } throw new java.text.ParseException("", 0); } public String toString() { return "PM"; } }; static { OracleTimestampFormat.timeSymbols.add(new fPM()); } public static final class PdMd extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int am = cal.get(AM_PM); str.append((am == AM) ? "a.m." : "p.m."); 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(AM_PM, PM); } else if (t.toUpperCase().equals("A.M.")) { pos.setIndex(i+4); cal.set(AM_PM, AM); } else { throw new java.text.ParseException("", 0); } } public String toString() { return "P.M."; } }; static { OracleTimestampFormat.timeSymbols.add(new PdMd()); } public static final class AdMd extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int am = cal.get(AM_PM); str.append((am == AM) ? "a.m." : "p.m."); 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(AM_PM, AM); } else if (t.toUpperCase().equals("P.M.")) { pos.setIndex(i+4); cal.set(AM_PM, PM); } else { throw new java.text.ParseException("", 0); } } public String toString() { return "A.M."; } }; static { OracleTimestampFormat.timeSymbols.add(new AdMd()); } public static final class MI extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int minute = cal.get(MINUTE); String m = Integer.toString(minute); if (m.length() == 1) { str.append('0'); } str.append(m); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int minute = getNumber(source, pos, 2); cal.set(MINUTE, minute); } public String toString() { return "MI"; } }; static { OracleTimestampFormat.timeSymbols.add(new MI()); } public static final class SSSSS extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int hour = cal.get(HOUR); int minute = cal.get(MINUTE); int second = cal.get(SECOND); String s = Integer.toString(hour*60*60+minute*60+second); for (int i = s.length(); i < 5; i++) { str.append('0'); } str.append(s); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int sssss = getNumber(source, pos, 5); int hour = sssss/3600; sssss -= hour; int minute = sssss/60; int second = sssss-minute; cal.set(HOUR, hour); cal.set(MINUTE, minute); cal.set(SECOND, second); } public String toString() { return "SSSSS"; } }; static { OracleTimestampFormat.timeSymbols.add(new SSSSS()); } public static final class SS extends TIME { public StringBuffer toString(StringBuffer str, Calendar cal, DateFormatSymbols symb) throws java.text.ParseException { int second = cal.get(SECOND); String s = Integer.toString(second); if (s.length() == 1) { str.append('0'); } str.append(s); return str; } public void parse(Calendar cal, DateFormatSymbols symb, String source, ParsePosition pos) throws java.text.ParseException { int second = getNumber(source, pos, 2); cal.set(SECOND, second); } public String toString() { return "SS"; } }; static { OracleTimestampFormat.timeSymbols.add(new SS()); } protected OracleTimestampFormat() { } public OracleTimestampFormat(String pattern) throws java.text.ParseException { cal = Calendar.getInstance(); symb = new DateFormatSymbols(); format = formatsCache.get(pattern); if (format == null) { format = new ArrayList<Object>(); ArrayList<DATE> symb = (ArrayList<DATE>)dateSymbols.clone(); symb.addAll(timeSymbols); compilePattern(format, symb, pattern); formatsCache.put(pattern, format); } } public OracleTimestampFormat(String pattern, Calendar calendar, DateFormatSymbols dateSymb) throws java.text.ParseException { cal = calendar; symb = dateSymb; format = formatsCache.get(pattern); if (format == null) { format = new ArrayList<Object>(); ArrayList<DATE> symb = (ArrayList<DATE>)dateSymbols.clone(); symb.addAll(timeSymbols); compilePattern(format, symb, pattern); formatsCache.put(pattern, format); } } public OracleTimeFormat getTimeFormat() { ArrayList<Object> f = new ArrayList<Object>(); int first = 0; int last = f.size(); for (int i = 0; i < f.size(); i++) { Object obj = format.get(i); if (obj instanceof TIME) { if (i > first) { first = i; } else if (i < last) { last = i; } } } for (int i = first; i < last; i++) { f.add(format.get(i)); } return new OracleTimeFormat(f, cal, symb); } public OracleDateFormat getDateFormat() { ArrayList<Object> f = new ArrayList<Object>(); int first = 0; int last = f.size(); for (int i = 0; i < f.size(); i++) { Object obj = format.get(i); if (obj instanceof DATE) { if (i > first) { first = i; } else if (i < last) { last = i; } } } for (int i = first; i < last; i++) { f.add(format.get(i)); } return new OracleDateFormat(f, cal, symb); } public String toString() { if (format != null) { StringBuilder str = new StringBuilder(); for (Object obj : format) { str.append(obj.toString()); } return str.toString(); } else { return "null"; } } public boolean equals(Object obj) { if (obj == null) { return false; } if (this == obj) { return true; } if (getClass() != obj.getClass()) { return false; } OracleTimestampFormat other = (OracleTimestampFormat)obj; return (format != null) ? format.equals(other.format) : false; } protected static void compilePattern(ArrayList<Object> format, ArrayList<DATE> symbols, String pattern) throws java.text.ParseException { if (pattern == null) { throw new java.text.ParseException(PATTERN_EXCEPTION, 0); } StringBuilder fill = new StringBuilder(); final int plen = pattern.length(); for (int i = 0; i < plen; ) { boolean f = false; for (DATE d : symbols) { String symb = d.toString(); if (i+symb.length() <= plen && pattern.regionMatches(true, i, symb, 0, symb.length())) { if (fill.length() > 0) { format.add(fill.toString()); fill.setLength(0); } format.add(d); i += symb.length(); f = true; break; } } if (!f) { char c = pattern.charAt(i); if (!Character.isLetterOrDigit(c)) { fill.append(c); i++; } else { throw new java.text.ParseException(PATTERN_EXCEPTION, i); } } } if (fill.length() > 0) { format.add(fill.toString()); } } public StringBuffer format(Object obj, StringBuffer str, FieldPosition fieldPosition) { if (obj instanceof java.util.Date) { java.util.Date date = (java.util.Date)obj; cal.setTime(date); if (format != null) { for (Object f : format) { if (f instanceof String) { str.append((String)f); } else { DATE d = (DATE)f; try { d.toString(str, cal, symb); } catch (Exception e) { e.printStackTrace(); } } } } } return str; } public Object parseObject(String source, ParsePosition pos) { return new java.sql.Timestamp(parseInMillis(source, pos)); } protected long parseInMillis(String source, ParsePosition pos) { int year = cal.get(YEAR); int month = cal.get(MONTH); cal.clear(); cal.set(YEAR, year); cal.set(MONTH, month); final int slen = source.length(); try { if (format != null) { for (Object obj : format) { if (obj instanceof DATE) { DATE d = (DATE)obj; d.parse(cal, symb, source, pos); } } for (int i = pos.getIndex(); i < slen; i++) { final char c = source.charAt(i); if (Character.isLetterOrDigit(c)) { throw new java.text.ParseException(FORMAT_EXCEPTION, 0); } } pos.setIndex(slen); } } catch (Exception e) {// e.printStackTrace(); pos.setErrorIndex(pos.getIndex()); pos.setIndex(0); return 0; } return cal.getTimeInMillis(); } private static char getSign(String source, ParsePosition pos) throws java.text.ParseException { final int len = source.length(); int i; for (i = pos.getIndex(); i < len; i++) { final char c = source.charAt(i); if (c == '-' || c == '+') { pos.setIndex(i); return c; } if (Character.isDigit(c)) { pos.setIndex(i); return '+'; } if (Character.isLetter(c)) { pos.setIndex(i); throw new java.text.ParseException("", i); } } throw new java.text.ParseException("", i); } private static int getNumber(String source, ParsePosition pos, int digits) throws java.text.ParseException, NumberFormatException { final int len = source.length(); String d = ""; int i; for (i = pos.getIndex(); i < len; i++) { final char c = source.charAt(i); if (Character.isDigit(c)) { break; } else if (Character.isLetter(c)) { pos.setIndex(i); throw new java.text.ParseException("", i); } } for (; i < len; i++) { final char c = source.charAt(i); if (Character.isDigit(c)) { d += c; if (d.length() == digits) { pos.setIndex(i+1); return Integer.valueOf(d); } } else if (Character.isLetter(c)) { pos.setIndex(i); throw new java.text.ParseException("", i); } else { break; } } pos.setIndex(i); return Integer.valueOf(d); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -