Methods Summary |
---|
private static int | getDate(java.lang.String dateString)
if (dateString.length() == 2) {
return (dateString.charAt(0) - '0") * 10
+ (dateString.charAt(1) - '0");
} else {
return (dateString.charAt(0) - '0");
}
|
private static int | getMonth(java.lang.String monthString)
int hash = Character.toLowerCase(monthString.charAt(0)) +
Character.toLowerCase(monthString.charAt(1)) +
Character.toLowerCase(monthString.charAt(2)) - 3 * 'a";
switch (hash) {
case 22:
return Calendar.JANUARY;
case 10:
return Calendar.FEBRUARY;
case 29:
return Calendar.MARCH;
case 32:
return Calendar.APRIL;
case 36:
return Calendar.MAY;
case 42:
return Calendar.JUNE;
case 40:
return Calendar.JULY;
case 26:
return Calendar.AUGUST;
case 37:
return Calendar.SEPTEMBER;
case 35:
return Calendar.OCTOBER;
case 48:
return Calendar.NOVEMBER;
case 9:
return Calendar.DECEMBER;
default:
throw new IllegalArgumentException();
}
|
private static com.android.internal.http.HttpDateTime$TimeOfDay | getTime(java.lang.String timeString)
// HH might be H
int i = 0;
int hour = timeString.charAt(i++) - '0";
if (timeString.charAt(i) != ':")
hour = hour * 10 + (timeString.charAt(i++) - '0");
// Skip ':'
i++;
int minute = (timeString.charAt(i++) - '0") * 10
+ (timeString.charAt(i++) - '0");
// Skip ':'
i++;
int second = (timeString.charAt(i++) - '0") * 10
+ (timeString.charAt(i++) - '0");
return new TimeOfDay(hour, minute, second);
|
private static int | getYear(java.lang.String yearString)
if (yearString.length() == 2) {
int year = (yearString.charAt(0) - '0") * 10
+ (yearString.charAt(1) - '0");
if (year >= 70) {
return year + 1900;
} else {
return year + 2000;
}
} else if (yearString.length() == 3) {
// According to RFC 2822, three digit years should be added to 1900.
int year = (yearString.charAt(0) - '0") * 100
+ (yearString.charAt(1) - '0") * 10
+ (yearString.charAt(2) - '0");
return year + 1900;
} else if (yearString.length() == 4) {
return (yearString.charAt(0) - '0") * 1000
+ (yearString.charAt(1) - '0") * 100
+ (yearString.charAt(2) - '0") * 10
+ (yearString.charAt(3) - '0");
} else {
return 1970;
}
|
public static long | parse(java.lang.String timeString)
int date = 1;
int month = Calendar.JANUARY;
int year = 1970;
TimeOfDay timeOfDay;
Matcher rfcMatcher = HTTP_DATE_RFC_PATTERN.matcher(timeString);
if (rfcMatcher.find()) {
date = getDate(rfcMatcher.group(1));
month = getMonth(rfcMatcher.group(2));
year = getYear(rfcMatcher.group(3));
timeOfDay = getTime(rfcMatcher.group(4));
} else {
Matcher ansicMatcher = HTTP_DATE_ANSIC_PATTERN.matcher(timeString);
if (ansicMatcher.find()) {
month = getMonth(ansicMatcher.group(1));
date = getDate(ansicMatcher.group(2));
timeOfDay = getTime(ansicMatcher.group(3));
year = getYear(ansicMatcher.group(4));
} else {
throw new IllegalArgumentException();
}
}
// FIXME: Y2038 BUG!
if (year >= 2038) {
year = 2038;
month = Calendar.JANUARY;
date = 1;
}
Time time = new Time(Time.TIMEZONE_UTC);
time.set(timeOfDay.second, timeOfDay.minute, timeOfDay.hour, date,
month, year);
return time.toMillis(false /* use isDst */);
|