获取UTC时间,但是设置了全局的TimeZone,导致后面的时间都是以此Zone为准:
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); Calendar cal = Calendar.getInstance(); Date date = cal.getTime();
用时差计算UTC时间:
public static Date getCurrentUTCTime() {
Calendar calendar = Calendar.getInstance();
int offset = calendar.get(Calendar.ZONE_OFFSET);
calendar.add(Calendar.MILLISECOND, -offset);
return calendar.getTime();
}
MySql数据库中的日期类型字段,对应java中的Date类应该使用java.sql.Date或者java.sql.Timestamp,都是继承了java.util.Date.
注:java.sql.Date只精确到年月日
UTC转Local时间:
/**
* 功能描述: 数据库中的utc时间转换为指定格式本地时间
*/
public static String utcToLocal(Date utc, String format) {
if (null == utc) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
String utcStr = sdf.format(utc);
return utcToLocal(utcStr, format, format);
}
/**
* 功能描述: 将指定格式的UTC时间转为指定格式的本地时间字符串
*/
public static String utcToLocal(String utcStr, String utcFormat, String localFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(utcFormat);
sdf.setTimeZone(TimeZone.getTimeZone(TIMEZONE_UTC));
Date utc = null;
try {
utc = sdf.parse(utcStr);
} catch (ParseException e) {
LOGGER.error("parse find wrong.", e);
}
sdf = new SimpleDateFormat(localFormat);
sdf.setTimeZone(TimeZone.getDefault());
return sdf.format(utc);
}