获取某一天的开始时间
以下是获取某一天开始时间的三种实现方式
第一种方式
这种方式直接通过使用Calendar类提供的接口来实现。
/*** 获取一天的开始时间* @param date 某一天时间* @return 某一天的开始时间,比如2005-01-01 00:00:00.000*/
public Date getFirstTimeOfDay_1(Date date){Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);return calendar.getTime();
}
第二种方式
这种方式通过以当前时间到1970年1月1号0点0分0秒作为基准时间的差值(间隔毫秒数)实现。
/*** 获取一天的开始时间,* @param date 某一天时间* @return 某一天的开始时间,比如2005-01-01 00:00:00.000*/
public Date getFirstTimeOfDay_2(Date date){//为什么要做这个lessTimeZone计算,主要是时区的问题,造成少一天的情况,//比如date='2019-01-02 06:00:00',如果不计算lessTimeZone,这时计算结果就是'2019-01-01 00:00:00',本来想获取的期望结果'2019-01-02 00:00:00',//如果date='2019-01-02 09:00:00',这时计算结果就是'2019-01-02 00:00:00',这个结果是符合逾期的。//为什么会这样,就是因为存在时区的问题,我们是东八区,date.getTime()的结果并不是到1970年1月1号0点0分0秒(GMT)的毫秒数,而是到1970年1月1号8点0分0秒的毫秒数,//你品,你细品int lessTimeZone = date.getHours()*60*60*1000/TimeZone.getDefault().getRawOffset() == 0?1:0;//date是东八区时间,date.getTime()是到东八区时间之间的毫秒间隔long time = date.getTime();long zeroT=time/(86400000)*(86400000) - TimeZone.getDefault().getRawOffset();//new Date(zeroT)创建一个东八区的时间,会多出来8个小时return (new DateTime(zeroT)).plusDays(lessTimeZone).toDate();
}
第三种方式
这种方式通过以当前时间到一个指定的时间作为基准时间的差值(间隔毫秒数)实现。
/*** 获取一天的开始时间,* @param date 某一天时间* @return 某一天的开始时间,比如2005-01-01 00:00:00.000*/
public Date getFirstTimeOfDay_3(Date date){//946656000000L是基准时间2000-01-01 00:00:00:000的毫秒数long baseStartDay = 946656000000L;long interval = date.getTime()-baseStartDay;long dayFirstTime=interval/(86400000)*(86400000)+baseStartDay;return new Date(dayFirstTime);
}
单元测试
测试以上3种方式的性能如何
import org.joda.time.DateTime;import java.io.*;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;public class Test {public static void main(String[] args) {Test test = new Test();long start = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {test.getFirstTimeOfDay_1(new Date());}System.out.println("耗时:"+(System.currentTimeMillis()-start));}//省略代码
}
对以上每一种方法,循环10万次调用。
第一种方式大约耗时:170毫秒
第二种方式大约耗时:200毫秒
第三种方式大约耗时:16毫秒
前两种方式明显耗时比第三种方式要搞很多,但是第三种方式,必须取之前的某一个具体的时间点作为基准,不过也不碍事,一般我们都是获取近期的某天的开始时间,太久远的数据,也不再关心了。
获取某一天的开始时间相关推荐
- oracle旬统计,oracle获取上一旬的开始时间和结束时间的函数
-- 获取上旬开始时间 create or replace function fd_lastxunstart(rq in date) return string is refstr varchar2( ...
- oracle旬统计,oracle获取上一旬的开始时间和结束时间的实现函数
-- 获取上旬开始时间 create or replace function fd_lastxunstart(rq in date) return string is refstr varchar2( ...
- php 获取季度时间段,php 取开始时间和结束时间所跨越的全部季度时间
/** 由起止日期算出其中所跨的季度 和各季度开始结束时间 * params * $st:开始日期 Y-m-d格式 * $et:结束日期 Y-m-d格式*/ function getQuarter($ ...
- php输出12个月,php获取12个月内的开始时间和结束时间
$currentTime = time(); $cyear = floor(date("Y",$currentTime)); $cMonth = floor(date(" ...
- Calendar获取当前季度、月、周的开始时间结束时间
java在很多场合下会根据当前时间计算本季度的开始时间结束时间.当前月份的开始时间结束时间.当前周的开始时间以及结束时间.我这里整理下一个时间加工类,作为工具类记录下. 一.获取计算相关时间的方法如下 ...
- 获取年、季度、月份的开始时间和结束时间,到时分秒
根据传入的日期获取开始时间和结束时间,到时分秒级别 如果不要时分秒,SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" ...
- 快速获取一天的开始时间和结束时间
前言 在日常开发中,我们经常需要获取某一天的开始时间和结束时间,然后再去做一些逻辑处理.这里提供两种demo. java8之前 这种是采用手动设置日期的时分秒为需要的格式,具体代码如下 @Testpu ...
- calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...
在进行频次.周期业务处理的时候,需要查询日.周.旬.月.季度.年等周期时间,为此而写的一个时间工具类. import java.text.ParseException; import java.tex ...
- oracle取本月最后一天是星期几_Oracle 获取本周、本月、本季、现年的第一天和最后一天...
Oracle 获取本周.本月.本季.本年的第一天和最后一天 --本周 select trunc(sysdate,'d')+1 from dual; select trunc(sysdate,'d')+ ...
- Oracle 获取本周、本月、本季、本年的第一天和最后一天
来源:https://www.cnblogs.com/cheng5x/p/6888158.html Oracle 获取本周.本月.本季.本年的第一天和最后一天 --本周 select trunc(sy ...
最新文章
- [转]Format a ui-grid grid column as currency
- python中文读音ndarray-numpy中的ndarray方法和属性详解
- Python学习笔记(Ⅰ)——Python程序结构与基础语法
- android transform xml xsl,XslCompiledTransform.Transform 方法 (System.Xml.Xsl) | Microsoft Docs
- ie8下修改input的type属性报错
- 【CodeForces - 1A】Theatre Square(水题,几何)(CODEFORCES,梦的开始)
- python实现随机抽取答题_如何在python中实现随机选择
- php flea,FleaPHP - 开发框架 - PHP开源网(PHP-OPEN.ORG)
- 炫龙dcpro黑苹果_毁灭者DC W650DC装黑苹果心得
- 深度:嵌入式系统的软件架构设计!
- 单端通用ISM频段接收器 Si4313
- js大屏导出图片_js将canvas保存成图片并下载
- 十个Python图像处理工具,不可不知!
- kali中无线密码的破解
- java语言【#106. 求绝对值】(已通过)
- 小程序云开发db封装
- 全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?
- 1896-2021历届奥运会奖牌榜(Python数据处理)
- 发那科系统基本参数概述
- Java dom4j如何获取,添加,删除,查找,设置Element属性呢?