in core/src/main/java/com/alibaba/fastjson2/util/DateUtils.java [3037:4239]
public static ZonedDateTime parseZonedDateTime(byte[] str, int off, int len, ZoneId defaultZoneId) {
if (str == null) {
return null;
}
if (len == 0) {
return null;
}
if (len == 16) {
return parseZonedDateTime16(str, off, defaultZoneId);
}
if (len < 19) {
return null;
}
String zoneIdStr = null;
char c0 = (char) str[off];
char c1 = (char) str[off + 1];
char c2 = (char) str[off + 2];
char c3 = (char) str[off + 3];
char c4 = (char) str[off + 4];
char c5 = (char) str[off + 5];
char c6 = (char) str[off + 6];
char c7 = (char) str[off + 7];
char c8 = (char) str[off + 8];
char c9 = (char) str[off + 9];
char c10 = (char) str[off + 10];
char c11 = (char) str[off + 11];
char c12 = (char) str[off + 12];
char c13 = (char) str[off + 13];
char c14 = (char) str[off + 14];
char c15 = (char) str[off + 15];
char c16 = (char) str[off + 16];
char c17 = (char) str[off + 17];
char c18 = (char) str[off + 18];
char c19 = len == 19 ? ' ' : (char) str[off + 19];
char c20, c21 = '0', c22 = '0', c23 = '0', c24 = '0', c25 = '0', c26 = '0', c27 = '0', c28 = '0', c29 = '\0';
switch (len) {
case 19:
case 20:
c20 = '\0';
break;
case 21:
c20 = (char) str[off + 20];
break;
case 22:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
break;
case 23:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
break;
case 24:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
break;
case 25:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
break;
case 26:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
c25 = (char) str[off + 25];
break;
case 27:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
c25 = (char) str[off + 25];
c26 = (char) str[off + 26];
break;
case 28:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
c25 = (char) str[off + 25];
c26 = (char) str[off + 26];
c27 = (char) str[off + 27];
break;
case 29:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
c25 = (char) str[off + 25];
c26 = (char) str[off + 26];
c27 = (char) str[off + 27];
c28 = (char) str[off + 28];
break;
default:
c20 = (char) str[off + 20];
c21 = (char) str[off + 21];
c22 = (char) str[off + 22];
c23 = (char) str[off + 23];
c24 = (char) str[off + 24];
c25 = (char) str[off + 25];
c26 = (char) str[off + 26];
c27 = (char) str[off + 27];
c28 = (char) str[off + 28];
c29 = (char) str[off + 29];
break;
}
char y0, y1, y2, y3, m0, m1, d0, d1, h0, h1, i0, i1, s0, s1, S0, S1, S2, S3, S4, S5, S6, S7, S8;
int zoneIdBegin;
boolean isTimeZone = false, pm = false;
if (c4 == '-' && c7 == '-' && (c10 == ' ' || c10 == 'T') && c13 == ':' && c16 == ':'
&& (c19 == '[' || c19 == 'Z' || c19 == '+' || c19 == '-' || c19 == ' ')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 19;
} else if (c4 == '-' && c7 == '-' && (c10 == ' ' && c11 == ' ') && c14 == ':' && c17 == ':' && len == 20) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c12;
h1 = c13;
i0 = c15;
i1 = c16;
s0 = c18;
s1 = c19;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 20;
} else if (len == 20 && c2 == ' ' && c6 == ' ' && c11 == ' ' && c14 == ':' && c17 == ':') {
y0 = c7;
y1 = c8;
y2 = c9;
y3 = c10;
int month = DateUtils.month(c3, c4, c5);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c0;
d1 = c1;
h0 = c12;
h1 = c13;
i0 = c15;
i1 = c16;
s0 = c18;
s1 = c19;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 20;
} else if (c4 == '-' && c7 == '-' && (c10 == ' ' || c10 == 'T') && c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 21 || c21 == '[' || c21 == '+' || c21 == '-' || c21 == 'Z')) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 21;
isTimeZone = c21 == '|';
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':'
&& c19 == '.' && (len == 22 || c22 == '[' || c22 == '+' || c22 == '-' || c22 == 'Z')) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 22;
isTimeZone = c22 == '|';
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == 'Z'
&& c17 == '[' && c21 == ']'
&& len == 22) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = '0';
s1 = '0';
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
isTimeZone = true;
zoneIdBegin = 17;
} else if (len == 22
&& c3 == ' ' && c5 == ',' && c6 == ' ' && c11 == ' '
&& c13 == ':' && c16 == ':'
&& c19 == ' ' && (c20 == 'A' || c20 == 'P') && c21 == 'M'
) {
y0 = c7;
y1 = c8;
y2 = c9;
y3 = c10;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = '0';
d1 = c4;
h0 = '0';
h1 = c12;
pm = c20 == 'P';
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 22;
} else if (len == 22
&& c2 == '/' && c5 == '/' && c10 == ' '
&& c13 == ':' && c16 == ':'
&& c19 == ' ' && (c20 == 'A' || c20 == 'P') && c21 == 'M'
) {
m0 = c0;
m1 = c1;
d0 = c3;
d1 = c4;
y0 = c6;
y1 = c7;
y2 = c8;
y3 = c9;
h0 = c11;
h1 = c12;
pm = c20 == 'P';
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 22;
} else if (len == 23
&& c3 == ' ' && c5 == ',' && c6 == ' ' && c11 == ' '
&& c14 == ':' && c17 == ':' && c20 == ' '
&& (c21 == 'A' || c21 == 'P') && c22 == 'M'
) {
y0 = c7;
y1 = c8;
y2 = c9;
y3 = c10;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = '0';
d1 = c4;
h0 = c12;
h1 = c13;
pm = c21 == 'P';
i0 = c15;
i1 = c16;
s0 = c18;
s1 = c19;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 23;
} else if (len == 23
&& c3 == ' ' && c6 == ',' && c7 == ' ' && c12 == ' '
&& c14 == ':' && c17 == ':'
&& c20 == ' ' && (c21 == 'A' || c21 == 'P') && c22 == 'M'
) {
y0 = c8;
y1 = c9;
y2 = c10;
y3 = c11;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c4;
d1 = c5;
h0 = '0';
h1 = c13;
pm = c21 == 'P';
i0 = c15;
i1 = c16;
s0 = c18;
s1 = c19;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 23;
} else if (len == 23
&& c3 == ' ' && c5 == ',' && c6 == ' ' && c11 == ',' && c12 == ' '
&& c14 == ':' && c17 == ':'
&& c20 == ' ' && (c21 == 'A' || c21 == 'P') && c22 == 'M'
) {
y0 = c7;
y1 = c8;
y2 = c9;
y3 = c10;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = '0';
d1 = c4;
h0 = '0';
h1 = c13;
pm = c21 == 'P';
i0 = c15;
i1 = c16;
s0 = c18;
s1 = c19;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 23;
} else if (len == 24
&& c3 == ' ' && c6 == ',' && c7 == ' ' && c12 == ' '
&& c15 == ':' && c18 == ':'
&& c21 == ' ' && (c22 == 'A' || c22 == 'P') && c23 == 'M'
) {
y0 = c8;
y1 = c9;
y2 = c10;
y3 = c11;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c4;
d1 = c5;
h0 = c13;
h1 = c14;
pm = c22 == 'P';
i0 = c16;
i1 = c17;
s0 = c19;
s1 = c20;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 24;
} else if (len == 24
&& c3 == ' ' && c6 == ',' && c7 == ' ' && c12 == ',' && c13 == ' '
&& c15 == ':' && c18 == ':'
&& c21 == ' ' && (c22 == 'A' || c22 == 'P') && c23 == 'M'
) {
y0 = c8;
y1 = c9;
y2 = c10;
y3 = c11;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c4;
d1 = c5;
h0 = '0';
h1 = c14;
pm = c22 == 'P';
i0 = c16;
i1 = c17;
s0 = c19;
s1 = c20;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 24;
} else if (len == 24
&& c3 == ' ' && c5 == ',' && c6 == ' ' && c11 == ',' && c12 == ' '
&& c15 == ':' && c18 == ':'
&& c21 == ' ' && (c22 == 'A' || c22 == 'P') && c23 == 'M'
) {
y0 = c7;
y1 = c8;
y2 = c9;
y3 = c10;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = '0';
d1 = c4;
h0 = c13;
h1 = c14;
pm = c22 == 'P';
i0 = c16;
i1 = c17;
s0 = c19;
s1 = c20;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 24;
} else if (c4 == '-' && c7 == '-' && (c10 == ' ' || c10 == 'T') && c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 23 || c23 == '[' || c23 == '|' || c23 == '+' || c23 == '-' || c23 == 'Z')) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 23;
isTimeZone = c23 == '|';
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 24 || c24 == '[' || c24 == '|' || c24 == '+' || c24 == '-' || c24 == 'Z')) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = c23;
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 24;
isTimeZone = c24 == '|';
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 25 || c25 == '[' || c25 == '|' || c25 == '+' || c25 == '-' || c25 == 'Z')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = c23;
S4 = c24;
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 25;
isTimeZone = c25 == '|';
} else if (len == 25
&& c3 == ' ' && c6 == ',' && c7 == ' ' && c12 == ',' && c13 == ' '
&& c16 == ':' && c19 == ':'
&& c22 == ' ' && (c23 == 'A' || c23 == 'P') && c24 == 'M'
) {
y0 = c8;
y1 = c9;
y2 = c10;
y3 = c11;
int month = DateUtils.month(c0, c1, c2);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c4;
d1 = c5;
h0 = c14;
h1 = c15;
pm = c23 == 'P';
i0 = c17;
i1 = c18;
s0 = c20;
s1 = c21;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 25;
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 26 || c26 == '[' || c26 == '|' || c26 == '+' || c26 == '-' || c26 == 'Z')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = c23;
S4 = c24;
S5 = c25;
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 26;
isTimeZone = c26 == '|';
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 27 || c27 == '[' || c27 == '|' || c27 == '+' || c27 == '-' || c27 == 'Z')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
if (c23 == ' ') {
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 23;
} else {
S3 = c23;
S4 = c24;
S5 = c25;
S6 = c26;
S7 = '0';
S8 = '0';
zoneIdBegin = 27;
isTimeZone = c27 == '|';
}
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T') && c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 28 || c28 == '[' || c28 == '|' || c28 == '+' || c28 == '-' || c28 == 'Z')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = c23;
S4 = c24;
S5 = c25;
S6 = c26;
S7 = c27;
S8 = '0';
zoneIdBegin = 28;
isTimeZone = c28 == '|';
} else if (len == 28 && c3 == ' ' && c7 == ' ' && c10 == ' ' && c13 == ':' && c16 == ':' && c19 == ' ' && c23 == ' ') {
int month = DateUtils.month(c4, c5, c6);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
y0 = c24;
y1 = c25;
y2 = c26;
y3 = c27;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 19;
zoneIdStr = new String(str, off + 20, 3);
} else if (len == 28 && c3 == ',' && c4 == ' ' && c6 == ' ' && c10 == ' ' && c15 == ' '
&& c18 == ':' && c21 == ':' && c24 == ' ') {
// RFC 1123
y0 = c11;
y1 = c12;
y2 = c13;
y3 = c14;
int month = DateUtils.month(c7, c8, c9);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = '0';
d1 = c5;
h0 = c16;
h1 = c17;
i0 = c19;
i1 = c20;
s0 = c22;
s1 = c23;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 24;
isTimeZone = true;
} else if (len == 29
&& c3 == ',' && c4 == ' ' && c7 == ' ' && c11 == ' ' && c16 == ' '
&& c19 == ':' && c22 == ':' && c25 == ' '
) {
// RFC 1123
y0 = c12;
y1 = c13;
y2 = c14;
y3 = c15;
int month = DateUtils.month(c8, c9, c10);
if (month > 0) {
m0 = (char) ('0' + month / 10);
m1 = (char) ('0' + (month % 10));
} else {
m0 = '0';
m1 = '0';
}
d0 = c5;
d1 = c6;
h0 = c17;
h1 = c18;
i0 = c20;
i1 = c21;
s0 = c23;
s1 = c24;
S0 = '0';
S1 = '0';
S2 = '0';
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 25;
isTimeZone = true;
} else if (c4 == '-' && c7 == '-'
&& (c10 == ' ' || c10 == 'T')
&& c13 == ':' && c16 == ':' && c19 == '.'
&& (len == 29 || c29 == '[' || c29 == '|' || c29 == '+' || c29 == '-' || c29 == 'Z')
) {
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c5;
m1 = c6;
d0 = c8;
d1 = c9;
h0 = c11;
h1 = c12;
i0 = c14;
i1 = c15;
s0 = c17;
s1 = c18;
S0 = c20;
S1 = c21;
S2 = c22;
S3 = c23;
S4 = c24;
S5 = c25;
S6 = c26;
S7 = c27;
S8 = c28;
zoneIdBegin = 29;
isTimeZone = c29 == '|';
} else if (len == 22 && (c17 == '+' || c17 == '-')) {
// yyyyMMddHHmmssSSSZ
y0 = c0;
y1 = c1;
y2 = c2;
y3 = c3;
m0 = c4;
m1 = c5;
d0 = c6;
d1 = c7;
h0 = c8;
h1 = c9;
i0 = c10;
i1 = c11;
s0 = c12;
s1 = c13;
S0 = c14;
S1 = c15;
S2 = c16;
S3 = '0';
S4 = '0';
S5 = '0';
S6 = '0';
S7 = '0';
S8 = '0';
zoneIdBegin = 17;
} else if ((len == 32 && c6 == ',' && c7 == ' ' && c10 == '-' && c14 == '-' && c19 == ' ' && c22 == ':' && c25 == ':' && str[off + 28] == ' ')
|| (len == 33 && c7 == ',' && c8 == ' ' && c11 == '-' && c15 == '-' && c20 == ' ' && c23 == ':' && c26 == ':' && str[off + 29] == ' ')
|| (len == 34 && c8 == ',' && c9 == ' ' && c12 == '-' && c16 == '-' && c21 == ' ' && c24 == ':' && c27 == ':' && str[off + 30] == ' ')
|| (len == 35 && c9 == ',' && c10 == ' ' && c13 == '-' && c17 == '-' && c22 == ' ' && c25 == ':' && c28 == ':' && str[off + 31] == ' ')
) {
return parseZonedDateTimeCookie(new String(str, off, len));
} else if (len == 34) {
DateTimeFormatter formatter = DATE_TIME_FORMATTER_34;
if (formatter == null) {
formatter = DATE_TIME_FORMATTER_34 = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O yyyy", Locale.ENGLISH);
}
return ZonedDateTime.parse(new String(str, off, len), formatter);
} else if (len == 31 && str[off + 3] == ',') {
DateTimeFormatter formatter;
formatter = DATE_TIME_FORMATTER_RFC_2822;
if (formatter == null) {
formatter = DATE_TIME_FORMATTER_RFC_2822 = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
}
return ZonedDateTime.parse(new String(str, off, len), formatter);
} else {
return null;
}
if (pm && h0 == '1' && h1 == '2') {
pm = false;
}
if (pm) {
int hourValue = DateUtils.hourAfterNoon(h0, h1);
h0 = (char) (hourValue >> 16);
h1 = (char) ((short) hourValue);
}
LocalDateTime ldt = localDateTime(
y0, y1, y2, y3,
m0, m1,
d0, d1,
h0, h1,
i0, i1,
s0, s1,
S0, S1, S2, S3, S4, S5, S6, S7, S8
);
if (ldt == null) {
return null;
}
ZoneId zoneId;
if (isTimeZone) {
String tzStr = new String(str, zoneIdBegin, len - zoneIdBegin);
switch (tzStr) {
case "UTC":
case "[UTC]":
zoneId = UTC;
break;
default:
TimeZone timeZone = TimeZone.getTimeZone(tzStr);
zoneId = timeZone.toZoneId();
break;
}
} else if (zoneIdBegin == len) {
zoneId = defaultZoneId;
} else {
char first = (char) str[off + zoneIdBegin];
if (first == 'Z') {
zoneId = UTC;
} else {
if (zoneIdStr == null) {
if (first == '+' || first == '-') {
zoneIdStr = new String(str, off + zoneIdBegin, len - zoneIdBegin);
} else if (first == ' ') {
zoneIdStr = new String(str, off + zoneIdBegin + 1, len - zoneIdBegin - 1);
} else { // '[
if (zoneIdBegin < len) {
zoneIdStr = new String(str, off + zoneIdBegin + 1, len - zoneIdBegin - 2);
}
}
}
zoneId = getZoneId(zoneIdStr, defaultZoneId);
}
}
if (zoneId == null) {
zoneId = defaultZoneId;
}
if (zoneId == null) {
zoneId = DEFAULT_ZONE_ID;
}
return ZonedDateTime.ofLocal(ldt, zoneId, null);
}