Ikuta Erika

导航

关于时间与日历

获取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);
    }

  

 

posted on 2018-03-08 10:43  风灯  阅读(354)  评论(0编辑  收藏  举报