|
|
|
@ -15,6 +15,7 @@
|
|
|
|
|
*/ |
|
|
|
|
package com.fr.third.joda.time.tz; |
|
|
|
|
|
|
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
|
import java.io.DataInputStream; |
|
|
|
|
import java.io.File; |
|
|
|
|
import java.io.FileInputStream; |
|
|
|
@ -24,6 +25,7 @@ import java.lang.ref.SoftReference;
|
|
|
|
|
import java.security.AccessController; |
|
|
|
|
import java.security.PrivilegedAction; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Set; |
|
|
|
|
import java.util.TreeSet; |
|
|
|
@ -52,6 +54,8 @@ public class ZoneInfoProvider implements Provider {
|
|
|
|
|
private final Map<String, Object> iZoneInfoMap; |
|
|
|
|
/** Maps ids to strings or SoftReferences to DateTimeZones. */ |
|
|
|
|
private final Set<String> iZoneInfoKeys; |
|
|
|
|
/** 内置可能加载不到的带加号的资源文件. */ |
|
|
|
|
private static Map<String, byte[]> GMTData = new HashMap(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Search the default classloader resource path for compiled data files. |
|
|
|
@ -217,12 +221,18 @@ public class ZoneInfoProvider implements Provider {
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
if (in == null) { |
|
|
|
|
StringBuilder buf = new StringBuilder(40) |
|
|
|
|
.append("Resource not found: \"") |
|
|
|
|
.append(path) |
|
|
|
|
.append("\" ClassLoader: ") |
|
|
|
|
.append(iLoader != null ? iLoader.toString() : "system"); |
|
|
|
|
throw new IOException(buf.toString()); |
|
|
|
|
if (name.contains("+")) { |
|
|
|
|
name = name.substring(name.indexOf("/") + 1); |
|
|
|
|
byte[] data = GMTData.get(name); |
|
|
|
|
return new ByteArrayInputStream(data); |
|
|
|
|
} else { |
|
|
|
|
StringBuilder buf = new StringBuilder(40) |
|
|
|
|
.append("Resource not found: \"") |
|
|
|
|
.append(path) |
|
|
|
|
.append("\" ClassLoader: ") |
|
|
|
|
.append(iLoader != null ? iLoader.toString() : "system"); |
|
|
|
|
throw new IOException(buf.toString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return in; |
|
|
|
@ -302,4 +312,19 @@ public class ZoneInfoProvider implements Provider {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static { |
|
|
|
|
GMTData.put("GMT+1", new byte[]{70, 0, 3, 45, 48, 49, 62, 62}); |
|
|
|
|
GMTData.put("GMT+2", new byte[]{70, 0, 3, 45, 48, 50, 60, 60}); |
|
|
|
|
GMTData.put("GMT+3", new byte[]{70, 0, 3, 45, 48, 51, 58, 58}); |
|
|
|
|
GMTData.put("GMT+4", new byte[]{70, 0, 3, 45, 48, 52, 56, 56}); |
|
|
|
|
GMTData.put("GMT+5", new byte[]{70, 0, 3, 45, 48, 53, 54, 54}); |
|
|
|
|
GMTData.put("GMT+6", new byte[]{70, 0, 3, 45, 48, 54, 52, 52}); |
|
|
|
|
GMTData.put("GMT+7", new byte[]{70, 0, 3, 45, 48, 55, 50, 50}); |
|
|
|
|
GMTData.put("GMT+8", new byte[]{70, 0, 3, 45, 48, 56, 48, 48}); |
|
|
|
|
GMTData.put("GMT+9", new byte[]{70, 0, 3, 45, 48, 57, 46, 46}); |
|
|
|
|
GMTData.put("GMT+10", new byte[]{70, 0, 3, 45, 49, 48, 44, 44}); |
|
|
|
|
GMTData.put("GMT+11", new byte[]{70, 0, 3, 45, 49, 49, 42, 42}); |
|
|
|
|
GMTData.put("GMT+12", new byte[]{70, 0, 3, 45, 49, 50, 40, 40}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|