当前位置: 首页 > news >正文

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前

一、概述

        在项目开发中,遇到一个类似于 超时关闭的订单(超过1分钟后关闭订单) 的需求,在数据的时间写入时,用的数据库系统的时间函数 SYSDATE , 而在处理超时时间时,用的是 JAVA应用程序时间处理。 在代码评审环节,大佬们给出的意见时,万一出现时间不一致的情况,会产生bug 。要改!统一用一个来源的时间 (统一用数据库时间 or 统一用java应用程序时间 )。

        大概流程是:

    

1、 数据写入,用数据库系统时间 
insert USER_order (id , lock_time) values ('1', sysdate) 2、超过一分后 时间获取是
new java.util.Date()  + 1分钟

基本环境信息:

      • 数据库: ORACLE 11G
      • JAVA: 万年不变的JDK8

问题定位:

        由于决定,统一使用 Oracle数据库的时间,那么问题变成: Oracle中时间获取多少分钟后。在Oracle中可以通过SYSDATE获取当前时间,加上组合 INTERVAL 实现时间的偏移量处理,本文将记录 SYSDATE和INTERVAL函数的用法。

        从点到线,本文也会记录 在java程序中,获取多少分钟后,获取多少小时后的时间 .

二、Oracle时间多少秒后

1、oracle 获取当前时间

-- oracle 获取当前时间
SELECTSYSDATE ,SYSTIMESTAMP
FROMdual ;

2、一年之后 , 一年之前的今天

SELECTSYSDATE ,  SYSDATE + INTERVAL '1' YEAR 一年后, SYSTIMESTAMP + INTERVAL '-1' YEAR "一年前"
FROMdual ;

3、一个月

SELECTSYSDATE ,  SYSDATE + INTERVAL '1' MONTH  , SYSTIMESTAMP + INTERVAL '-1' MONTH 
FROMdual ;

4、一天

SELECTSYSDATE ,  SYSDATE + INTERVAL '1' DAY  , SYSTIMESTAMP + INTERVAL '-1' DAY 
FROMdual ;

5、 一小时

SELECTSYSDATE ,  SYSDATE + INTERVAL '1' HOUR  , SYSTIMESTAMP + INTERVAL '-1' HOUR 
FROMdual ;

6、一分钟

SELECTSYSDATE ,  SYSDATE + INTERVAL '1' MINUTE  , SYSTIMESTAMP + INTERVAL '-1' HOUR 
FROMdual ;

7、 10秒钟

SELECTSYSDATE ,  SYSDATE + INTERVAL '10' SECOND  , SYSTIMESTAMP + INTERVAL '-10' SECOND 
FROMdual ;

三、Java时间多少秒后

1、使用 DateUtils工具类,依赖pom如下

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version>
</dependency>

2、相关测试代码如下:

/*** Description: java日期 多少分钟后/多少天后* @return void* @version v1.0* @author wu* @date 2023/7/28 18:00*/
@Test
public void dateAddTimeTest() throws Exception{final Date date = new Date();System.out.println("当前时间是:" +DateUtils.format(date,"yyyy-MM-dd HH:mm:ss"));System.out.println();// 1、一年后,一年前final Date date1 = DateUtils.addYears(date, 1);final Date date2 = DateUtils.addYears(date, -1);System.out.println("一年后:" +DateUtils.format(date1,"yyyy-MM-dd HH:mm:ss"));System.out.println("一年前:" +DateUtils.format(date2,"yyyy-MM-dd HH:mm:ss"));System.out.println();// 2、一个月final Date date3 = DateUtils.addMonths(date, 1);final Date date4 = DateUtils.addMonths(date, -1);System.out.println("一个月:" +DateUtils.format(date3,"yyyy-MM-dd HH:mm:ss"));System.out.println("一个月:" +DateUtils.format(date4,"yyyy-MM-dd HH:mm:ss"));System.out.println();// 3、一天final Date date5 = DateUtils.addDays(date, 1);final Date date6 = DateUtils.addDays(date, -1);System.out.println("一天后:" +DateUtils.format(date5,"yyyy-MM-dd HH:mm:ss"));System.out.println("一天前:" +DateUtils.format(date6,"yyyy-MM-dd HH:mm:ss"));// ignore more DateUtils time test ....
}

2.1、输出结果如下:

当前时间是:2023-07-28 18:23:12一年后:2024-07-28 18:23:12
一年前:2022-07-28 18:23:12一个月:2023-08-28 18:23:12
一个月:2023-06-28 18:23:12一天后:2023-07-29 18:23:12
一天前:2023-07-27 18:23:12

四、MyBatis中使用

1、在MyBatis中使用如下,注意使用 ${time} ,不能使用 #{time}

// 注意:拼接成 单引号的字符串 ,具体数值可以改到配置中心/*** 过期时间,单位:秒*/
@Value("${expire.time:60}")
private int expireTime;String time = "'".concat(String.valueOf(expireTime)).concat("'");-- myBatis sql 中写法如下
UPDATE USER_order
SET STATUS = '1'
WHERE LOCK_TIME <= SYSDATE+INTERVAL ${time} SECOND

五、总结

        1、Oracle中,实现获取多少时间之后、之前,可以通过 INTERVAL 函数来实现 ,其中 数值 > 0 ,则为之后; 数值 < 0 , 则为之前

SYSDATE + INTERVAL '10' 单位 
单位 可以数值是: 
YEAR 年
MONTH 月
DAY 日
HOUR 时
MINUTE 分
SECOND  秒

        2、在java程序中,可以使用 DateUtils.addXXX ,实现获取多少时间之前、之后。

http://www.lryc.cn/news/102275.html

相关文章:

  • 自动驾驶之轨迹规划8——Apollo参考线和轨迹
  • ES6 - promise.all和race方法的用法详解
  • CAD .NET 15.0 企业版 Crack
  • 苍穹外卖day07——缓存菜品套餐+购物车功能实现
  • 学习笔记|大模型优质Prompt开发与应用课(二)|第四节:大模型帮你写代码,小白也能做程序
  • 建造者设计模式 + 高阶函数 => DSL
  • 重学C++系列之智能指针简单介绍
  • LabVIEW开发航天器动力学与控制仿真系统
  • 享元模式——实现对象的复用
  • 【GreenDao】关联表实现,父表关联多个子表
  • python网站创建005:数据交互
  • golang 字符串操作、处理
  • Nginx配置WebSocket反向代理
  • devops(后端)
  • Ubuntu安装企业微信
  • Prometheus 的应用服务发现及黑河部署等
  • JAVA SE -- 第十二天
  • 实战:工作中对并发问题的处理
  • 腾讯云Cloud Studio:基于Claude快速完成Excel工资自动核算
  • Spring Boot OAuth2 快速入门示例
  • MethodInterceptor
  • PID模块化__以stm32直流电机速度为例
  • Java ~ Collection/Executor ~ DelayQueue【总结】
  • 前端高级面试题-安全相关
  • 【前缀和】560.和为 K 的子数组
  • 【Docker】安全及日志管理
  • 基于x-scan扫描线的3D模型渲染算法
  • LeetCode36.Valid-Sudoku<有效的数独>
  • Linux中的pause函数
  • CommonCollections6链分析