⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dateparser.java

📁 已经移植好的java虚拟机
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		int y;		long millis = 0;				boolean isLeap = year%4 == 0;		y = year - 1;		long julianDay = 365L*y + floorDivide(y, 4) + (JAN_1_1_JULIAN_DAY - 3);				isLeap = isLeap && ((year%100 != 0) || (year%400 == 0));		// Add 2 because Gregorian calendar starts 2 days after Julian calendar		julianDay += floorDivide(y, 400) - floorDivide(y, 100) + 2;		julianDay += isLeap ? LEAP_NUM_DAYS[month] : NUM_DAYS[month];		julianDay += day;		return julianDay;	}	/**	 * Divide two long integers, returning the floor of the quotient.	 * <p>	 * Unlike the built-in division, this is mathematically well-behaved.	 * E.g., <code>-1/4</code> => 0	 * but <code>floorDivide(-1,4)</code> => -1.	 * @param numerator the numerator	 * @param denominator a divisor which must be > 0	 * @return the floor of the quotient.	 */	private static final long floorDivide(long numerator, long denominator) {		// We do this computation in order to handle		// a numerator of Long.MIN_VALUE correctly		return (numerator >= 0) ?			numerator / denominator :			((numerator + 1) / denominator) - 1;	}	// public String toString() {	// 	return "" + month + "/" + day + "/" + year 	// 		+ " " + hour + ":" + minute + ":" + second;	// }	private long julianDayToMillis(long julian) {		return (julian - julianDayOffset) * millisPerDay;	}	private void internalParse(String s) {		int year = -1;		int mon = -1;		int mday = -1;		int hour = -1;		int min = -1;		int sec = -1;		int millis = -1;		int c = -1;		int i = 0;		int n = -1;		int wst = -1;		int tzoffset = -1;		int prevc = 0;	syntax: {		if (s == null)		break syntax;		int limit = s.length();		while (i < limit) {		c = s.charAt(i);		i++;		if (c <= ' ' || c == ',')			continue;		if (c == '(') {	// skip comments			int depth = 1;			while (i < limit) {			c = s.charAt(i);			i++;			if (c == '(') depth++;			else if (c == ')')				if (--depth <= 0)					break;			}			continue;		}		if ('0' <= c && c <= '9') {			n = c - '0';			while (i < limit && '0' <= (c = s.charAt(i)) && c <= '9') {			n = n * 10 + c - '0';			i++;			}			if (prevc == '+' || prevc == '-' && year>=0) {			// timezone offset			if (n < 24)				n = n * 60;	// EG. "GMT-3"			else				n = n % 100 + n / 100 * 60;	// eg "GMT-0430"			if (prevc == '+')	// plus means east of GMT				n = -n;			if (tzoffset != 0 && tzoffset != -1)				break syntax;			tzoffset = n;			} else if (n >= 70)			if (year >= 0)				break syntax;			else if (c <= ' ' || c == ',' || c == '/' || i >= limit)				// year = n < 1900 ? n : n - 1900;				year = n < 100 ? n + 1900 : n;			else				break syntax;			else if (c == ':')			if (hour < 0)				hour = (byte) n;			else if (min < 0)				min = (byte) n;			else				break syntax;			else if (c == '/')			if (mon < 0)				mon = (byte) (n - 1);			else if (mday < 0)				mday = (byte) n;			else				break syntax;			else if (i < limit && c != ',' && c > ' ' && c != '-')			break syntax;			else if (hour >= 0 && min < 0)			min = (byte) n;			else if (min >= 0 && sec < 0)			sec = (byte) n;			else if (mday < 0)			mday = (byte) n;			else			break syntax;			prevc = 0;		} else if (c == '/' || c == ':' || c == '+' || c == '-')			prevc = c;		else {			int st = i - 1;			while (i < limit) {			c = s.charAt(i);			if (!('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z'))				break;			i++;			}			if (i <= st + 1)			break syntax;			int k;			for (k = wtb.length; --k >= 0;)			if (wtb[k].regionMatches(true, 0, s, st, i - st)) {				int action = ttb[k];				if (action != 0) {				if (action == 1) {	// pm					if (hour > 12 || hour < 1)					break syntax;					else if (hour < 12)										hour += 12;								} else if (action == 14) {  // am					if (hour > 12 || hour < 1)					break syntax;					else if (hour == 12)										hour = 0;								} else if (action <= 13) {	// month!					if (mon < 0)					mon = (byte) (action - 2);					else					break syntax;								} else {					tzoffset = action - 10000;								}							}				break;			}			if (k < 0)			break syntax;			prevc = 0;		}		}		if (year < 1583 || mon < 0 || mday < 0)		break syntax;		if (sec < 0)		sec = 0;		if (min < 0)		min = 0;		if (hour < 0)		hour = 0;		this.year = year;		month = mon;		day = mday;		this.hour = hour;        this.tzoffset = -tzoffset * 60 * 1000;		minute = min;		second = sec;		milli = 0;		return;	}		// syntax error		throw new IllegalArgumentException();	}	private static Hashtable timezones;	private int[] days_in_month = {31, 28, 31, 30, 31, 30, 31,									31, 30, 31, 30, 31};	private String[] month_shorts = {"Jan", "Feb", "Mar", "Apr", 		"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};	private String[] weekday_shorts = {"Mon", "Tue", "Wed", "Thu",										"Fri", "Sat", "Sun"};	private static long julianDayOffset = 2440588;	private static int millisPerHour = 60 * 60 * 1000;	private static int millisPerDay = 24 * millisPerHour;	private static final int JAN_1_1_JULIAN_DAY = 1721426; // January 1, year 1 (Gregorian)	private final static String wtb[] = {		"am", "pm",		"monday", "tuesday", "wednesday", "thursday", "friday",		"saturday", "sunday",		"january", "february", "march", "april", "may", "june",		"july", "august", "september", "october", "november", "december",		"gmt", "ut", "utc", "est", "edt", "cst", "cdt",		"mst", "mdt", "pst", "pdt"		// this time zone table needs to be expanded	};	private final static int ttb[] = {		14, 1, 0, 0, 0, 0, 0, 0, 0,		2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,		10000 + 0, 10000 + 0, 10000 + 0,	// GMT/UT/UTC		10000 + 5 * 60, 10000 + 4 * 60,	// EST/EDT		10000 + 6 * 60, 10000 + 5 * 60,		10000 + 7 * 60, 10000 + 6 * 60,		10000 + 8 * 60, 10000 + 7 * 60	};	private static final int NUM_DAYS[]		= {0,31,59,90,120,151,181,212,243,273,304,334}; 	private static final int LEAP_NUM_DAYS[]		= {0,31,60,91,121,152,182,213,244,274,305,335}; 	static {		timezones = new Hashtable();		timezones.put("GMT", new Integer(0 * millisPerHour));		timezones.put("UT", new Integer(0 * millisPerHour));		timezones.put("UTC", new Integer(0 * millisPerHour));		timezones.put("PST", new Integer(-8 * millisPerHour));		timezones.put("PDT", new Integer(-7 * millisPerHour));		timezones.put("JST", new Integer(9 * millisPerHour));		local_tz = ((Integer)timezones.get("PST")).intValue();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -