1,修改文件bionic/libc/tzcode/localtime.c
//US
char* pst = "PST8:00:00";
char* mst = "MST7:00:00";
char* cst = "CST6:00:00";
char* est = "EST5:00:00";
//EU
char* gmt = "GMT0:00:00";
char* cet = "CET-1:00:00";
// try the "persist.sys.timezone" system property first
static char buf[PROP_VALUE_MAX];
if (name == NULL && __system_property_get("persist.sys.timezone", buf) > 0) {
name = buf;
}
if(strcmp(buf,"America/Chicago") == 0){
name = cst;
}else if(strcmp(buf,"America/New_York") == 0){
name = est;
}else if(strcmp(buf,"America/Denver") == 0){
name = mst;
}else if(strcmp(buf,"America/Los_Angeles") == 0){
name = pst;
}else if(strcmp(buf,"Europe/London") == 0){
name = gmt;
}else if(strcmp(buf,"Europe/Belgrade") == 0){
name = cet;
}
2,修改文件libcore/luni/src/main/java/libcore/util/ZoneInfo.java
@Override
public int getOffset(long when) {
int unix = (int) (when / 1000);
int transition = Arrays.binarySearch(mTransitions, unix);
if (transition < 0) {
transition = ~transition - 1;
if (transition < 0) {
// Assume that all times before our first transition correspond to the
// oldest-known non-daylight offset. The obvious alternative would be to
// use the current raw offset, but that seems like a greater leap of faith.
return mEarliestRawOffset;
}
}
//return mRawOffset + mOffsets[mTypes[transition] & 0xff] * 1000; //注掉时间偏移
return mRawOffset;
}