关于日期时间的查询涉及到时区问题处理

19 篇文章 0 订阅

1.在程序传参的时间利用java 日期转化中设置时区来转

/**
     *String to Date
     * @param date
     * @param dateFormate
     * @return
     */
    public static Date parseStringToDateTimeZone(String date , String dateFormate,String timeZone){
        if(StringUtils.isEmpty(dateFormate)){
            dateFormate = "yyyy-MM-dd HH:mm:ss";
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormate);//注意月份是MM
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
        Date dateResult = null;
        try {
            dateResult = simpleDateFormat.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateResult;
    }
    public static void main(String[] args) {
        Date date=parseStringToDateTimeZone("2021-02-07 09:43:12",null,"GMT-8");
        System.out.println(date);
    }

2.利用数据库中日期函数来转化

2.1数据库的日期函数

2.2.1

now() 获得当前日期+时间(date + time)函数:now() now()获取的是服务器时间

2.2.2

sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:

mysql> select now(), sleep(3), now();

±--------------------±---------±--------------------+
| now() | sleep(3) | now() |
±--------------------±---------±--------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
±--------------------±---------±--------------------+

2.2.3获得当前 UTC 日期时间函数:

utc_date(), utc_time(), utc_timestamp()

mysql> select utc_timestamp(), utc_date(), utc_time(), now()

±--------------------±-----------±-----------±--------------------+
| utc_timestamp() | utc_date() | utc_time() | now() |
±--------------------±-----------±-----------±--------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
±--------------------±-----------±-----------±--------------------+

因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()
来进行国际化获取时间再通过

2.2为日期减去或者添加一个时间间隔

:date_sub()或者date_add()来获取时间段内的数据

DATE_SUB(date,INTERVAL expr type)

Type 的 值 可以是 毫秒,秒等
Type 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

当我们查询 某创建时间 大于当前utc_time()前一分钟的数据时参考一下sql

SELECT r.id,r.NAME,r.type,r.role_group_id roleGroupId,r.description,r.create_time,r.modify_time ,utc_date(),curtime()
        FROM sys_role r where r.account_id = 110
     
        and r.create_time >= date_sub(utc_time(),interval 1 minute)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值