java 时间的相关转换操作

关于时间的操作,写了个util
主要用于预测的时候,时间段的确定
预测的时间段,需要明确的规定范围,由于业务的促销都是整点开始,所以我们的预测时间段,也是从整点开始
所以就要将时间分为多个整段,比如一分钟一段,那么就是2018-06-18 00:00:00 到2018-06-18 00:01:00 就是一段
那么在确定一分钟为一段的前提下,我们就要将这一分钟内所有数据都归到这一分钟内
下面的util就有根据随机时间,确定这个时间是哪个段的
比如:
当前时间是2018-06-18 00:00:30 ,时间段为一分钟
根据下面的的方法,就可以得到2018-06-18 00:00:00和2018-06-18 00:01:00,也就是这个时间所在的时间区域

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;/*** 时间片分割工具类**/
public class TimeUtil {/*** 将一天的时间分割成等分的若干段,获得总段数** @param second 每个时间段的长度,单位秒* @return 返回一天的段数, 结果取加一法的结果*/public static int getAllSplitNums(int second) {return (24 * 60 * 60 - 1) / second + 1;}/*** 根据每段的时间和当前时间,算出当前时间在第几段* 时间段区间默认左闭右开* eg:如果5分钟为一个时间段的话,那么[00:00:00,00:05:00)就在第一段,返回1;[00:05:00,00:10:00)就在第二段,返回2** @param time* @param second* @return*/public static int getOneNum(long time, int second) {int secondNum = getSecondNum(time);return (secondNum - 1) / (second * 1000) + 1;}/*** 根据long类型的时间,获取时分秒的秒数** @param time long类型的时间* @return 时分秒的秒数*/public static int getSecondNum(long time) {Date date = new Date(time);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS");String format = simpleDateFormat.format(date);String[] split = format.split(":");int secondNum = 0;secondNum += Integer.valueOf(split[0]) * 60 * 60 * 1000;secondNum += Integer.valueOf(split[1]) * 60 * 1000;secondNum += Integer.valueOf(split[2]) * 1000;secondNum += Integer.valueOf(split[3]);return secondNum;}/*** 根据但当前时间和时间段长度,获得当前时间所在的时间段** @param reqTime 入参时间,eg:1535551963527,毫秒级* @param second 间隔时间* @return 返回入参时间所在的时间段,左开右闭*/public static String getSameTime(String reqTime, int second) {String s = null;try {Long reqTimeLong = Long.valueOf(reqTime);//获得这个时间在当天的第几段int secondNum = getSecondNum(reqTimeLong);long dayTime = reqTimeLong - secondNum;int oneNum = getOneNum(reqTimeLong, second);long end = dayTime + oneNum * second * 1000;long start = dayTime + (oneNum - 1) * second * 1000;SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");s = sdf2.format(start) + ":" + sdf2.format(end);} catch (Exception e) {e.printStackTrace();}return s;}/*** 是不是整时段,比如时间段是30,那么只有秒数是00或者30的才会返回true,其他情况返回false** @param timeInterval 时间段,单位秒* @return 布尔值*/public static Boolean isClock(Integer timeInterval) {if(timeInterval == null || timeInterval.equals(0)){return null;}long now = System.currentTimeMillis();SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHH-mm-ss");String nowStr = sdf2.format(now);String[] split = nowStr.split("-");//只取分秒int res = Integer.valueOf(split[1]) * 60 + Integer.valueOf(split[2]);return res % timeInterval == 0;}/*** 根据本端时间获取下段时间* @param time 本段时间,格式必须是yyyyMMddHHmmss_yyyyMMddHHmmss的* @return 返回下段时间,格式也是yyyyMMddHHmmss_yyyyMMddHHmmss*/public static String getNextTime(String time){String nextTime = null;try {String[] split = time.split(":");SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");Date startDate = sdf.parse(split[0]);System.out.println("startDate:"+startDate);Date endDate = sdf.parse(split[1]);System.out.println("endDate:"+endDate);int timeInterval = (int) (endDate.getTime() - startDate.getTime()) / 1000;System.out.println("timeInterval:"+timeInterval);long nextTimeLong = endDate.getTime() + 1;nextTime = getSameTime(nextTimeLong + "", timeInterval);} catch (Exception e) {e.printStackTrace();}return nextTime;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS-MVVM-模式介绍

一、MVVM概述 MVVM 到底是什么?我们首先看一下MVC架构:我们看到的是一个典型的 MVC 设置。Model 呈现数据,View 呈现用户界面,而 View Controller 调节它两者之间的交互。Cool!稍微考虑一下,虽然 View 和 …

[数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制

前言 在进行冷热分离的时候,需要将数据实时的复制在历史数据库中,我们使用的是binlogcanal的思想,将每次数据库数据的变更转换成消息发出来,然后再操作这些消息达到数据复制的 在京东,实现同样功能的组件,叫binlake 接下来详细说下: 1.Binl…

加密算法概念简介--MD5、SHA、DES、3DES、AES、RSA、ECC

MD5MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字&…

MAC下配置ZSH

MAC下面的终端是神器。而且苹果非常贴心的为我们准备好了ZSH。 可惜ZSH不是很好用,需要配合一些插件和模板:oh-my-zsh将bash切换为zsh chsh -s /bin/zsh其实还可以用which来定位(特别是ubuntu的童鞋) chsh -s which zsh 直接用zsh…

搭建: canal部署与实例运行

搭建: canal部署与实例运行 数据库读log同步用 详见下面

MAC下使用OpenSSL生成私钥和公钥

MAC OS自带了OpenSSL,直接在命令行里使用OPENSSL就可以。打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以搞定。1、打开Terminal--cd 到指定文件夹,如桌面Mac:~/Desktop $ openssl2、第一句命令:生成私钥&…

idea插件开发(01)---最简单的helloworld版,不需要知道原理,先跟我做一个最简单的弹框插件

前言 用了那么多idea插件,也想自己做一个插件,下面就是入门版本 你不需要先知道所有的概念,先跟着我的步骤做一个小;例子,后面再说原理 相关概念看后面一篇 本次以windos系统为例 开始 1.你得安装一个环境,供idea插件的开发使用 下载地址: https://www.jetbrains.com/idea/…

苹果封装的对称加密和非对称加密API

一、信息摘要算法5&#xff1a;MD51.系统库位置&#xff1a;<CommonCrypto/CommonHMAC.h>。2.非加密算法&#xff0c;属于哈希散列&#xff0c;不可逆&#xff0c;用于检验数据完整性。二、安全散列(哈希)算法SHA&#xff1a; 1.包含的散列算法&#xff1a;SHA-1&#xf…

RSA算法原理

一、RSA算法数论&#xff1a;将两个大素数相乘十分容易&#xff0c;但是想要对其乘积进行因式分解却极其困难&#xff0c;因此可以将乘积公开作为加密密钥。二、RSA算法涉及三个参数&#xff0c;n、e1、e2。三、公私钥生成过程1、首先&#xff0c;需要两个大质数&#xff0c;p和…

idea插件开发(02)---相关概念介绍

上一篇已经介绍了idea插件开发最简单的一个例子 本篇来说说相关概念,部分概念是网上抄的,网友的不同说法,但大致都是同一个意思 1.idea介绍 idea整个组件结构是基于PicoContainer的,他是一个嵌入式的Ioc容器,有点像Spring的容器 我们做的idea插件,作为扩展功能组件,可以添加到…

ECC椭圆曲线加密算法原理

比特币使用椭圆曲线算法生成公钥和私钥&#xff0c;选择的是secp256k1曲线。与RSA&#xff08;Ron Rivest&#xff0c;Adi Shamir&#xff0c;Len Adleman三位天才的名字&#xff09;一样&#xff0c;ECC&#xff08;Elliptic Curves Cryptography&#xff0c;椭圆曲线加密&…

mysql报错 DuplicateKeyException分析与解决

在做数据库同步的时候,发现一个错误,mysql报错如下: org.springframework.dao.DuplicateKeyException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:XXX ### The error may involve com.jd.medicine.b2…

[运维]---linux机器一般监控用到的概念记录

发布在linux上的机器,一般我们需要监测各项数据来证实服务器是没问题的, 如果出现问题,我们也可以通过以下指标找到问题的方向 容器指标硬件指标磁盘指标系统指标网络指标 容器指标 线程数 -当前容器内线程总数&#xff08;平均到每个核的线程数&#xff09;进程数 -当前容器…

SHA算法原理

一、SHA1算法简介 安全哈希算法&#xff08;Secure Hash Algorithm&#xff09;主要适用于数字签名标准&#xff08;Digital Signature Standard DSS&#xff09;里面定义的数字签名算法&#xff08;Digital Signature Algorithm DSA&#xff09;。对于长度小于2^64位的消息&am…

[数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用

mysql插入一条数据方式有四种,接下来逐个说明验证: 前提: 有一个表,作为本次测试: CREATE TABLE zs_test (id int(11) NOT NULL AUTO_INCREMENT,order_id int(11) DEFAULT NULL,name varchar(255) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY order_id_index (order_id) ) EN…

DES加密算法原理

一、DES算法理论 本世纪五十年代以来&#xff0c;密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼 &#xff08;Tuchman&#xff09;和麦耶&#xff08;Meyer&#xff09;根据信息论创始人香农&#xff08;Shannon&#xff09;提出的「多重加密有…

[python]---从java到python(01)---基础与入门上手

前言 我本是java派的,已经有几年了,直接也接触过其他语言,比如从最早的汇编语言到高级语言始祖的C; 但是近来越发觉得python很火,现在以我的视角开始写入门python基础,算是入坑了; 我的计划是这个系列要更契合那些有java基础的同胞们,用你们已有的java基础,用对比的方式,更快的…

AES加密算法原理

一、摘要 AES&#xff08;The Advanced Encryption Standard&#xff09;是美国国家标准与技术研究所用于加密电子数据的规范&#xff0c;在2002年5月26日建立。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES 是一个新的可以用于保护电子数据的加密算法…

java获取本机ipv4,并使用Google Guava 缓存

java写个util,获取本机ip,并使用Google Guava 缓存起来 四个方法: 获取本机ipv4ip转16进制16进制转ip校验ip 首先,Google Guava使用的maven配置 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version&g…

OpenSSL库概述

一、背景技术SSL是Secure Sockets Layer&#xff08;安全套接层协议&#xff09;的缩写&#xff0c;可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时&#xff0c;提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户…