/**
* 时区 时间转换方法:将传入的时间(可能为其他时区)转化成目标时区对应的时间
* @param sourceTime 时间格式必须为:yyyy-MM-dd HH:mm:ss
* @param sourceId 入参的时间的时区id 比如:+08:00
* @param targetId 要转换成目标时区id 比如:+09:00
* @param reFormat 返回格式 默认:yyyy-MM-dd HH:mm:ss
* @return string 转化时区后的时间
*/
public static String timeConvert(String sourceTime, String sourceId,
String targetId,String reFormat){
//校验入参是否合法
if (null == sourceId || "".equals(sourceId) || null == targetId
|| "".equals(targetId) || null == sourceTime
|| "".equals(sourceTime)){
return null;
}
if(StringUtil.isEmptyString(reFormat)){
reFormat = "yyyy-MM-dd HH:mm:ss";
}
//校验 时间格式必须为:yyyy-MM-dd HH:mm:ss
String reg = "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$";
if (!sourceTime.matches(reg)){
return null;
}
try{
//时间格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//根据入参原时区id,获取对应的timezone对象
TimeZone sourceTimeZone = TimeZone.getTimeZone("GMT"+sourceId);
//设置SimpleDateFormat时区为原时区(否则是本地默认时区),目的:用来将字符串sourceTime转化成原时区对应的date对象
df.setTimeZone(sourceTimeZone);
//将字符串sourceTime转化成原时区对应的date对象
java.util.Date sourceDate = df.parse(sourceTime);
//开始转化时区:根据目标时区id设置目标TimeZone
TimeZone targetTimeZone = TimeZone.getTimeZone("GMT"+targetId);
//设置SimpleDateFormat时区为目标时区(否则是本地默认时区),目的:用来将字符串sourceTime转化成目标时区对应的date对象
df.setTimeZone(targetTimeZone);
//得到目标时间字符串
String targetTime = df.format(sourceDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date date = sdf.parse(targetTime);
sdf = new SimpleDateFormat(reFormat);
return sdf.format(date);
}
catch (ParseException e){
e.printStackTrace();
}
return null;
}