关于时间与日历
获取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); }