📄 datemodule.java
字号:
} public static boolean date_default_timezone_set(Env env, String id) { env.setDefaultTimeZone(id); return true; } public static String date_format(DateTime dateTime, String format) { return dateTime.format(format); } public static void date_isodate_set(DateTime dateTime, int year, int week, int day) { dateTime.setISODate(year, week, day); } public static void date_modify(DateTime dateTime, String modify) { dateTime.modify(modify); } public static long date_offset_get(DateTime dateTime) { return dateTime.getOffset(); } public static Value date_parse(String date) { DateTime dateTime = new DateTime(date); QDate qDate = dateTime.getQDate(); ArrayValue array = new ArrayValueImpl(); array.put("year", qDate.getYear()); array.put("month", qDate.getMonth() + 1); array.put("day", qDate.getDayOfMonth()); array.put("hour", qDate.getHour()); array.put("minute", qDate.getMinute()); array.put("second", qDate.getSecond()); array.put("fraction", qDate.getMillisecond() / 1000.0); //warning_count //warnings //error_count //errors //is_localtime return array; } public static ArrayValue date_sun_info(long time, double latitude, double longitude) { throw new UnimplementedException("date_sun_info"); } public static Value date_sunrise(int timestamp, @Optional int format, @Optional double latitude, @Optional double longitude, @Optional double zenith, @Optional double gmtOffset) { //gmtOffset is specified in hours throw new UnimplementedException("date_sunrise"); } public static Value date_sunset(int timestamp, @Optional int format, @Optional double latitude, @Optional double longitude, @Optional double zenith, @Optional double gmtOffset) { //gmtOffset is specified in hours throw new UnimplementedException("date_sunset"); } public static void date_time_set(DateTime dateTime, int hour, int minute, @Optional int second) { dateTime.setTime(hour, minute, second); } @ReturnNullAsFalse public static DateTimeZone date_timezone_get(Env env, @NotNull DateTime dateTime) { if (dateTime == null) { env.warning("DateTime parameter must not be null"); return null; } return dateTime.getTimeZone(); } public static void date_timezone_set(Env env, @NotNull DateTime dateTime, @NotNull DateTimeZone dateTimeZone) { if (dateTime == null || dateTimeZone == null) { env.warning("parameters must not be null"); return; } dateTime.setTimeZone(dateTimeZone); } public static ArrayValue timezone_abbreviations_list() { return DateTimeZone.listAbbreviations(); } public static ArrayValue timezone_identifiers_list() { return DateTimeZone.listIdentifiers(); } public static Value timezone_name_from_abbr(StringValue abbr, @Optional("-1") int gmtOffset, @Optional boolean isDST) { if (gmtOffset == -1) return DateTimeZone.findTimeZone(abbr); else return DateTimeZone.findTimeZone(abbr, gmtOffset, isDST); } public static String timezone_name_get(DateTimeZone dateTimeZone) { return dateTimeZone.getName(); } public static long timezone_offset_get(DateTimeZone dateTimeZone, DateTime dateTime) { if (dateTimeZone == null) return 0; else return dateTimeZone.getOffset(dateTime); } public static DateTimeZone timezone_open(String timeZone) { return new DateTimeZone(timeZone); } public static Value timezone_transitions_get(DateTimeZone dateTimeZone) { return dateTimeZone.getTransitions(); } static class DateParser { private static final int INT = 1; private static final int PERIOD = 2; private static final int AGO = 3; private static final int AM = 4; private static final int PM = 5; private static final int MONTH = 6; private static final int WEEKDAY = 7; private static final int UTC = 8; private static final int UNIT_YEAR = 1; private static final int UNIT_MONTH = 2; private static final int UNIT_FORTNIGHT = 3; private static final int UNIT_WEEK = 4; private static final int UNIT_DAY = 5; private static final int UNIT_HOUR = 6; private static final int UNIT_MINUTE = 7; private static final int UNIT_SECOND = 8; private static final int UNIT_NOW = 9; private static final int NULL_VALUE = Integer.MAX_VALUE; private QDate _date; private String _s; private int _index; private int _length; private StringBuilder _sb = new StringBuilder(); private int _peekToken; private int _value; private int _digits; private int _unit; private int _weekday; private boolean _hasDate; private boolean _hasTime; DateParser(String s, QDate date) { _date = date; _s = s; _length = s.length(); } long parse() { _value = NULL_VALUE; _unit = 0; while (true) { int token = nextToken(); if (token == '-') { token = nextToken(); if (token == INT) _value = -_value; else { _peekToken = token; continue; } } if (token < 0) { return _date.getGMTTime(); } else if (token == INT) { int digits = _digits; int value = _value; token = nextToken(); if (token == PERIOD) { parsePeriod(); } else if (token == ':') { parseTime(); _hasTime = true; } else if (token == '-') { parseISODate(value); _hasDate = true; } else if (token == '/') { parseUSDate(value); _hasDate = true; } else if (token == MONTH) { parseDayMonthDate(value); _hasDate = true; } else { _peekToken = token; parseBareInt(value, digits); } } else if (token == PERIOD) { parsePeriod(); } else if (token == WEEKDAY) { addWeekday(_value, _weekday); _value = NULL_VALUE; } else if (token == MONTH) { parseMonthDate(_value); _hasDate = true; } else if (token == '@') { token = nextToken(); if (token == INT) { int value = _value; _value = NULL_VALUE; _date.setGMTTime(value * 1000L); token = nextToken(); if (token == '.') { token = nextToken(); if (token != INT) _peekToken = token; } else { _peekToken = token; } } } } } private void parsePeriod() { int value = _value; int unit = _unit; _value = NULL_VALUE; _unit = 0; int token = nextToken(); if (token == AGO) value = -value; else _peekToken = token; addTime(value, unit); } private void parseISODate(int value1) { int year = _date.getYear(); int month = 0; int day = 0; if (value1 < 0) value1 = - value1; int token = nextToken(); int value2 = 0; if (token == INT) { value2 = _value; _value = NULL_VALUE; } else { _peekToken = token; return; } token = nextToken(); if (token == '-') { token = nextToken(); if (token == INT) { if (value1 < 0) _date.setYear(value1); else if (value1 <= 68) _date.setYear(2000 + value1); else if (value1 < 100) _date.setYear(1900 + value1); else _date.setYear(value1); _date.setMonth(value2 - 1); _date.setDayOfMonth(_value); } else { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); _peekToken = token; } } else { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); _peekToken = token; } } private void parseUSDate(int value1) { int year = _date.getYear(); int month = 0; int day = 0; if (value1 < 0) value1 = - value1; int token = nextToken(); int value2 = 0; if (token == INT) { value2 = _value; } else { _peekToken = token; return; } _value = NULL_VALUE; token = nextToken(); if (token == '/') { token = nextToken(); if (token == INT) { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); if (_value < 0) _date.setYear(_value); else if (_value <= 68) _date.setYear(2000 + _value); else if (_value < 100) _date.setYear(1900 + _value); else _date.setYear(_value); } else { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); _peekToken = token; } _value = NULL_VALUE; } else { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); _peekToken = token; } } private void parseDayMonthDate(int value1) { int year = _date.getYear(); int month = 0; int day = 0; if (value1 < 0) value1 = - value1; int value2 = _value; _value = NULL_VALUE; int token = nextToken(); if (token == '-') { _value = NULL_VALUE; token = nextToken(); } if (token == INT) { _date.setDayOfMonth(value1); _date.setMonth(value2 - 1); if (_value < 0) _date.setYear(_value); else if (_value <= 68) _date.setYear(2000 + _value); else if (_value < 100) _date.setYear(1900 + _value); else _date.setYear(_value); _value = NULL_VALUE; } else { _date.setDayOfMonth(value1); _date.setMonth(value2 - 1); _peekToken = token; } } private void parseMonthDate(int value1) { if (value1 < 0) value1 = - value1; _value = NULL_VALUE; int token = nextToken(); if (token == '-') { _value = NULL_VALUE; token = nextToken(); } if (token == INT) { int value2 = _value; _value = NULL_VALUE; token = nextToken(); if (token == '-') { _value = NULL_VALUE; token = nextToken(); } if (token == INT) { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); if (_value < 0) _date.setYear(_value); else if (_value <= 68) _date.setYear(2000 + _value); else if (_value < 100) _date.setYear(1900 + _value); else _date.setYear(_value); _value = NULL_VALUE; } else { _date.setMonth(value1 - 1); _date.setDayOfMonth(value2); _peekToken = token; } } else { _date.setMonth(value1 - 1); _peekToken = token; } } private void parseTime() { int hour = _value; _value = NULL_VALUE; if (hour < 0) hour = - hour; _date.setHour(hour); _date.setMinute(0); _date.setSecond(0); _date.setMillisecond(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -