java date 今天凌晨_我爱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

8271f2c44217d048eb3add278be62f94.png

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

解决方案一:

日期工具类:

importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;public classDateUtils {/*** 获取次日0点时间

*@paramdate

*@returnjava.util.Date*/

public static String toSecDayStartHour(Date date) throwsParseException {

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);returns;

}

}

我把数据库的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,标记颜色部分重点。

SELECT LAST_INSERT_ID()insert into price_batch

CHANNEL_ID,

PROVINCE_ID_LIST,

PRICE_LIST,

EFFECTIVE_TIME,

STATUS,

CREATE_TIME,

CREATE_BY,

UPDATE_TIME,

UPDATE_BY,

#{channelId,jdbcType=INTEGER},

#{provinceIdList,jdbcType=VARCHAR},

#{priceList,jdbcType=VARCHAR},

(SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY))),

#{status,jdbcType=TINYINT},

#{createTime,jdbcType=TIMESTAMP},

#{createBy,jdbcType=VARCHAR},

#{updateTime,jdbcType=TIMESTAMP},

#{updateBy,jdbcType=VARCHAR},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值