📄 datemodule.java
字号:
int token = nextToken(); if (token == INT) { _date.setMinute(_value); _value = NULL_VALUE; } else { _peekToken = token; return; } token = nextToken(); if (token == ':') { token = nextToken(); if (token == INT) { _date.setSecond(_value); _value = NULL_VALUE; } else { _peekToken = token; return; } token = nextToken(); if (token == '.') { // milliseconds token = nextToken(); _value = NULL_VALUE; if (token != INT) { _peekToken = token; return; } } } if (token == AM) { hour = _date.getHour(); if (hour == 12) _date.setHour(0); } else if (token == PM) { hour = _date.getHour(); if (hour == 12) _date.setHour(12); else _date.setHour(hour + 12); } else _peekToken = token; parseTimezone(); } private void parseTimezone() { int token = nextToken(); int sign = 1; boolean hasUTC = false; if (token == UTC) { token = nextToken(); hasUTC = true; } if (token == '-') sign = -1; else if (token == '+') sign = 1; else { _peekToken = token; if (hasUTC) _date.setGMTTime(_date.getGMTTime() + _date.getZoneOffset()); return; } int offset = 0; token = nextToken(); if (token != INT) { _peekToken = token; if (hasUTC) _date.setGMTTime(_date.getGMTTime() + _date.getZoneOffset()); return; } else if (_digits == 4) { int value = sign * _value; _value = NULL_VALUE; _date.setGMTTime(_date.getGMTTime() - value * 60000L + _date.getZoneOffset()); return; } else if (_digits == 2) { int value = _value; token = nextToken(); if (token != ':') { _value = sign * _value; _peekToken = token; if (hasUTC) _date.setGMTTime(_date.getGMTTime() + _date.getZoneOffset()); return; } value = sign * (100 * value + _value); _date.setGMTTime(_date.getGMTTime() - value * 60000L + _date.getZoneOffset()); return; } else { _value = sign * _value; _peekToken = token; if (hasUTC) _date.setGMTTime(_date.getGMTTime() + _date.getZoneOffset()); return; } } private void addTime(int value, int unit) { if (value == NULL_VALUE) value = 1; else if (value == -NULL_VALUE) value = -1; switch (unit) { case UNIT_YEAR: _date.setYear(_date.getYear() + value); break; case UNIT_MONTH: _date.setMonth(_date.getMonth() + value); break; case UNIT_FORTNIGHT: _date.setGMTTime(_date.getGMTTime() + 14 * DAY * value); break; case UNIT_WEEK: _date.setGMTTime(_date.getGMTTime() + 7 * DAY * value); break; case UNIT_DAY: _date.setGMTTime(_date.getGMTTime() + DAY * value); break; case UNIT_HOUR: _date.setGMTTime(_date.getGMTTime() + HOUR * value); break; case UNIT_MINUTE: _date.setGMTTime(_date.getGMTTime() + MINUTE * value); break; case UNIT_SECOND: _date.setGMTTime(_date.getGMTTime() + 1000L * value); break; } } private void addWeekday(int value, int weekday) { if (value == NULL_VALUE) value = 0; else if (value == -NULL_VALUE) value = -1; _date.setDayOfMonth(_date.getDayOfMonth() + (8 + weekday - _date.getDayOfWeek()) % 7 + 7 * value); } private void parseBareInt(int value, int digits) { if (digits == 8 && ! _hasDate) { _hasDate = true; _date.setYear(value / 10000); _date.setMonth((value / 100 % 12) - 1); _date.setDayOfMonth(value % 100); } else if (digits == 6 && ! _hasTime) { _hasTime = true; _date.setHour(value / 10000); _date.setMinute(value / 100 % 100); _date.setSecond(value % 100); parseTimezone(); } else if (digits == 4 && ! _hasTime) { _hasTime = true; _date.setHour(value / 100); _date.setMinute(value % 100); _date.setSecond(0); parseTimezone(); } else if (digits == 2 && ! _hasTime) { _hasTime = true; _date.setHour(value); _date.setMinute(0); _date.setSecond(0); parseTimezone(); } int token = nextToken(); if (token == '.') { _value = NULL_VALUE; token = nextToken(); if (token == INT) _value = NULL_VALUE; else _peekToken = token; } else _peekToken = token; } int nextToken() { if (_peekToken > 0) { int token = _peekToken; _peekToken = 0; return token; } while (true) { skipSpaces(); int ch = read(); if (ch < 0) return -1; else if (ch == '-') return '-'; else if (ch == '+') return '+'; else if (ch == ':') return ':'; else if (ch == '.') return '.'; else if (ch == '/') return '/'; else if (ch == '@') return '@'; else if ('0' <= ch && ch <= '9') { int value = 0; int digits = 0; for (; '0' <= ch && ch <= '9'; ch = read()) { digits++; value = 10 * value + ch - '0'; } _value = value; _digits = digits; unread(); return INT; } else if ('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z') { _sb.setLength(0); for (; 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '.'; ch = read()) { _sb.append(Character.toLowerCase((char) ch)); } unread(); String s = _sb.toString(); return parseString(s); } else { // skip } } } private int parseString(String s) { if (s.endsWith(".")) s = s.substring(0, s.length() - 1); if ("now".equals(s) || "today".equals(s)) { _value = 0; _unit = UNIT_NOW; return PERIOD; } else if ("last".equals(s)) { _value = -1; return INT; } else if ("this".equals(s)) { _value = 0; return INT; } else if ("am".equals(s) || "a.m".equals(s)) { return AM; } else if ("pm".equals(s) || "p.m".equals(s)) { return PM; } else if ("next".equals(s)) { _value = 1; return INT; } else if ("third".equals(s)) { _value = 3; return INT; } else if ("fourth".equals(s)) { _value = 4; return INT; } else if ("fifth".equals(s)) { _value = 5; return INT; } else if ("sixth".equals(s)) { _value = 6; return INT; } else if ("seventh".equals(s)) { _value = 7; return INT; } else if ("eighth".equals(s)) { _value = 8; return INT; } else if ("ninth".equals(s)) { _value = 9; return INT; } else if ("tenth".equals(s)) { _value = 10; return INT; } else if ("eleventh".equals(s)) { _value = 11; return INT; } else if ("twelfth".equals(s)) { _value = 12; return INT; } else if ("yesterday".equals(s)) { _value = -1; _unit = UNIT_DAY; return PERIOD; } else if ("tomorrow".equals(s)) { _value = 1; _unit = UNIT_DAY; return PERIOD; } else if ("ago".equals(s)) { return AGO; } else if ("year".equals(s) || "years".equals(s)) { _unit = UNIT_YEAR; return PERIOD; } else if ("month".equals(s) || "months".equals(s)) { _unit = UNIT_MONTH; return PERIOD; } else if ("fortnight".equals(s) || "fortnights".equals(s)) { _unit = UNIT_FORTNIGHT; return PERIOD; } else if ("week".equals(s) || "weeks".equals(s)) { _unit = UNIT_WEEK; return PERIOD; } else if ("day".equals(s) || "days".equals(s)) { _unit = UNIT_DAY; return PERIOD; } else if ("hour".equals(s) || "hours".equals(s)) { _unit = UNIT_HOUR; return PERIOD; } else if ("minute".equals(s) || "minutes".equals(s)) { _unit = UNIT_MINUTE; return PERIOD; } else if ("second".equals(s) || "seconds".equals(s)) { _unit = UNIT_SECOND; return PERIOD; } else if ("second".equals(s) || "seconds".equals(s)) { _unit = UNIT_SECOND; return PERIOD; } else if ("january".equals(s) || "jan".equals(s)) { _value = 1; return MONTH; } else if ("february".equals(s) || "feb".equals(s)) { _value = 2; return MONTH; } else if ("march".equals(s) || "mar".equals(s)) { _value = 3; return MONTH; } else if ("april".equals(s) || "apr".equals(s)) { _value = 4; return MONTH; } else if ("may".equals(s)) { _value = 5; return MONTH; } else if ("june".equals(s) || "jun".equals(s)) { _value = 6; return MONTH; } else if ("july".equals(s) || "jul".equals(s)) { _value = 7; return MONTH; } else if ("august".equals(s) || "aug".equals(s)) { _value = 8; return MONTH; } else if ("september".equals(s) || "sep".equals(s) || "sept".equals(s)) { _value = 9; return MONTH; } else if ("october".equals(s) || "oct".equals(s)) { _value = 10; return MONTH; } else if ("november".equals(s) || "nov".equals(s)) { _value = 11; return MONTH; } else if ("december".equals(s) || "dec".equals(s)) { _value = 12; return MONTH; } else if ("sunday".equals(s) || "sun".equals(s)) { _weekday = 0; return WEEKDAY; } else if ("monday".equals(s) || "mon".equals(s)) { _weekday = 1; return WEEKDAY; } else if ("tuesday".equals(s) || "tue".equals(s) || "tues".equals(s)) { _weekday = 2; return WEEKDAY; } else if ("wednesday".equals(s) || "wed".equals(s) || "wednes".equals(s)) { _weekday = 3; return WEEKDAY; } else if ("thursday".equals(s) || "thu".equals(s) || "thur".equals(s) || "thurs".equals(s)) { _weekday = 4; return WEEKDAY; } else if ("friday".equals(s) || "fri".equals(s)) { _weekday = 5; return WEEKDAY; } else if ("saturday".equals(s) || "sat".equals(s)) { _weekday = 6; return WEEKDAY; } else if ("z".equals(s) || "gmt".equals(s) || "utc".equals(s)) { return UTC; } else return 0; } private void skipSpaces() { while (true) { int ch = read(); if (Character.isWhitespace((char) ch)) { continue; } else if (ch == '(') { for (ch = read(); ch > 0 && ch != ')'; ch = read()) { } } else { unread(); return; } } } int read() { if (_index < _length) return _s.charAt(_index++); else { _index++; return -1; } } void unread() { _index--; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -