public class ConvertTimeZoneUtil {
protected static final Log log = LogFactory.getLog("ConvertTimeZoneUtil.java");
public static String convertTimeFromSourceTimeZoneToTargetTimeZone(String dateTimeStr, String dateFormat, String sourceTimeZoneID,
String targetTimeZoneID){
log.info("ConvertTimeZoneUtil.java");
log.info("enter function--->convertTimeFromSourceTimeZoneToTargetTimeZone");
log.info("dateTime:"+dateTimeStr+",dateFormat:"+dateFormat+",sourceTimeZoneID:"+sourceTimeZoneID+",targetTimeZoneID:"+targetTimeZoneID);
String dateTime = "";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
try {
int diffTime = TimeZone.getTimeZone(sourceTimeZoneID).getRawOffset() - TimeZone.getTimeZone(targetTimeZoneID).getRawOffset();
Date newDate = sdf.parse(dateTimeStr);
long nowTime = newDate.getTime();
long newNowTime = nowTime - diffTime;
newDate = new Date(newNowTime);
dateTime= sdf.format(newDate);
} catch (ParseException e) {
e.printStackTrace();
} catch(Exception e1) {
e1.printStackTrace();
}
log.info("result time:"+dateTime);
return dateTime;
}
public static String convertLocalTimeToTargetTimeZone(String localTime, String dateFormat,
String targetTimeZoneID){
log.info("ConvertTimeZoneUtil.java");
log.info("enter function--->convertLocalTimeToTargetTimeZone");
log.info("localTime:"+localTime+",dateFormat:"+dateFormat+",targetTimeZoneID:"+targetTimeZoneID+",localTimeZoneID:"+TimeZone.getDefault().getID());
String dateTime = "";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
try {
int diffTime = TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone(targetTimeZoneID).getRawOffset();
Date newDate = sdf.parse(localTime);
long nowTime = newDate.getTime();
long newNowTime = nowTime - diffTime;
newDate = new Date(newNowTime);
dateTime= sdf.format(newDate);
} catch (ParseException e) {
e.printStackTrace();
} catch(Exception e1) {
e1.printStackTrace();
}
log.info("result time:"+dateTime);
return dateTime;
}
public static String convertTimeFromSourceTimeZoneTimeToLocalTimeZone(String sourceTime, String dateFormat,
String sourceTimeZoneID){
log.info("ConvertTimeZoneUtil.java");
log.info("enter function--->convertTimeFromSourceTimeZoneTimeToLocalTimeZone");
log.info("sourceTime:"+sourceTime+",dateFormat:"+dateFormat+",sourceTimeZoneID:"+sourceTimeZoneID+",localTimeZoneID:"+TimeZone.getDefault().getID());
String dateTime = "";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
try {
int diffTime = TimeZone.getTimeZone(sourceTimeZoneID).getRawOffset() - TimeZone.getDefault().getRawOffset();
Date newDate = sdf.parse(sourceTime);
long nowTime = newDate.getTime();
long newNowTime = nowTime - diffTime;
newDate = new Date(newNowTime);
dateTime= sdf.format(newDate);
} catch (ParseException e) {
e.printStackTrace();
} catch(Exception e1) {
e1.printStackTrace();
}
log.info("result time:"+dateTime);
return dateTime;
}
public static void main(String[] args) {
String dateFormat = "MM/dd/yyyy hh:mma";
/*String localTime = new SimpleDateFormat(dateFormat).format(new Date());
convertLocalTimeToTargetTimeZone(localTime, dateFormat, "GMT+3");
String srcDateTime="02/15/2013 10:56上午";
log.info("----------------------------------");
convertTimeFromSourceTimeZoneTimeToLocalTimeZone(srcDateTime, dateFormat, "GMT+3");
log.info("----------------------------------");*/
String sourceTime=new SimpleDateFormat(dateFormat).format(new Date());
convertTimeFromSourceTimeZoneToTargetTimeZone("02/25/2013 1:37上午", dateFormat, "GMT-8", "GMT+8");
}
}
sybase数据库获得时区的sql: select datediff (hh, getutcdate(), getdate())
获得客户端浏览器的时区的js代码,并将些时区的ID通Ajax方法发送给后服务器。
<script type="text/javascript">
var d, tz, s = "";
d = new Date();
tz = d.getTimezoneOffset();
tz = tz*(-1);
if(tz < 0) {
s = s + "GMT-";
tz = tz * (-1);
}
else s = s + "GMT+";
if(tz >= 0) {
var hour = Math.floor(tz/60);
var minute = tz - Math.floor(tz/60) * 60;
if(hour < 10) s = s + "0" + hour;
else s = s + hour;
s = s + ":";
if(minute < 10) s = s + "0" + minute;
else s = s + minute;
}
var homeURL = $("#homeURL").html()+"/home?";
$.getJSON(homeURL,{"timeZoneCode":s},function(data){
});
</script>