我爱java系列---【次日凌晨00:00:00生效】

开发中有时候要用到生效时间,我遇到一个问题,后台effective是datetime类型的,实体类中是date类型的,直接new date()(当前时间是:2019-12-12 14:58:00 )格式化之后存到数据库里,工具类调用之后时间老是和本地时间不一致,打断点,断点显示2019-12-13 00:00:00 ,而数据库存的却是:2019-12-12 16:00:00

 上面图中红色圈的是我解决问题之后的正确结果。

解决方案一:

日期工具类:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {

    /**
     * 获取次日0点时间
     * @param date
     * @return java.util.Date
     */
    public static String toSecDayStartHour(Date date) throws ParseException {
        Calendar cal=Calendar.getInstance();
        cal.add(Calendar.DATE,1);//这里改为1
        Date time=cal.getTime();
        //2019-12-12 11:29:26
        String s = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(time);
        return s;
    }

}

我把数据库的effective生效时间类型改成了字符串varchar,实体类中也改成了string类型,这样就不会出现那种情况了。

解决方案二:

# 获取今日凌晨时间
UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))
# 获取昨日凌晨时间
UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY)
# 获取明日凌晨时间
UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY)
# 获取的是时间戳
 
# 时间戳转换成datetime, datetime也就是我们说的日期格式 年-月-日 时-分-秒
FROM_UNIXTIME();
# datetime转时间戳
UNIX_TIMESTAMP();
 
# 测试
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))) 今日;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY)) 昨日;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY)) 明日;
 
# 结果:
2019-10-06 00:00:00 // 今日
2019-10-05 00:00:00 // 昨日
2019-10-07 00:00:00 // 明日
 
# 可看出 + INTERVAL 1 DAY 可自己随意修改
 
 
# DATE_FORMAT(datetime ,format)用法,转换日期格式
DATE_FORMAT('2019-10-07 00:00:00', '%Y-%c-%d');
# 结果:
2019-10-07 // DATE_FORMAT之后的结果
 
# 常用的:
# '%Y-%c-%d %H:%i:%S'  
#  年-月-日  时:分:秒
# '%Y-%c-%d'
#  年-月-日
# '%H:%i:%S'
#  时:分:秒
# 自己随意取舍
 
# 下面7点来自 : https://www.jb51.net/article/132425.htm
 
1、当前日期
select DATE_SUB(curdate(), INTERVAL 0 DAY) ;
 
2、明天日期
select DATE_SUB(curdate(), INTERVAL -1 DAY) ;
 
3、昨天日期
select DATE_SUB(curdate(), INTERVAL 1 DAY) ;
 
4、前一个小时时间
select date_sub(now(), interval 1 hour);
 
5、后一个小时时间
select date_sub(now(), interval -1 hour);
 
6、前30分钟时间
select date_add(now(), interval -30 minute)
 
7、后30分钟时间
select date_add(now(), interval 30 minute)

 修改sql语句:这里我用的是xml,标记颜色部分重点。

<insert id="insertSelective" parameterType="com.demo.PriceBatch">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      SELECT LAST_INSERT_ID()
    </selectKey>
    insert into price_batch
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="channelId != null">
        CHANNEL_ID,
      </if>
      <if test="provinceIdList != null">
        PROVINCE_ID_LIST,
      </if>
      <if test="priceList != null">
        PRICE_LIST,
      </if>
      <if test="1 == 1">
        EFFECTIVE_TIME,
      </if>
      <if test="status != null">
        STATUS,
      </if>
      <if test="createTime != null">
        CREATE_TIME,
      </if>
      <if test="createBy != null">
        CREATE_BY,
      </if>
      <if test="updateTime != null">
        UPDATE_TIME,
      </if>
      <if test="updateBy != null">
        UPDATE_BY,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="channelId != null">
        #{channelId,jdbcType=INTEGER},
      </if>
      <if test="provinceIdList != null">
        #{provinceIdList,jdbcType=VARCHAR},
      </if>
      <if test="priceList != null">
        #{priceList,jdbcType=VARCHAR},
      </if>
      <if test="1 == 1">
        (SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY))),
      </if>
      <if test="status != null">
        #{status,jdbcType=TINYINT},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="createBy != null">
        #{createBy,jdbcType=VARCHAR},
      </if>
      <if test="updateTime != null">
        #{updateTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateBy != null">
        #{updateBy,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
愿你走出半生,归来仍是少年!
原文地址:https://www.cnblogs.com/hujunwei/p/12029247.html