以下是获取某一天开始时间的三种实现方式

第一种方式

这种方式直接通过使用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毫秒
前两种方式明显耗时比第三种方式要搞很多,但是第三种方式,必须取之前的某一个具体的时间点作为基准,不过也不碍事,一般我们都是获取近期的某天的开始时间,太久远的数据,也不再关心了。

获取某一天的开始时间相关推荐

  1. oracle旬统计,oracle获取上一旬的开始时间和结束时间的函数

    -- 获取上旬开始时间 create or replace function fd_lastxunstart(rq in date) return string is refstr varchar2( ...

  2. oracle旬统计,oracle获取上一旬的开始时间和结束时间的实现函数

    -- 获取上旬开始时间 create or replace function fd_lastxunstart(rq in date) return string is refstr varchar2( ...

  3. php 获取季度时间段,php 取开始时间和结束时间所跨越的全部季度时间

    /** 由起止日期算出其中所跨的季度 和各季度开始结束时间 * params * $st:开始日期 Y-m-d格式 * $et:结束日期 Y-m-d格式*/ function getQuarter($ ...

  4. php输出12个月,php获取12个月内的开始时间和结束时间

    $currentTime = time(); $cyear = floor(date("Y",$currentTime)); $cMonth = floor(date(" ...

  5. Calendar获取当前季度、月、周的开始时间结束时间

    java在很多场合下会根据当前时间计算本季度的开始时间结束时间.当前月份的开始时间结束时间.当前周的开始时间以及结束时间.我这里整理下一个时间加工类,作为工具类记录下. 一.获取计算相关时间的方法如下 ...

  6. 获取年、季度、月份的开始时间和结束时间,到时分秒

    根据传入的日期获取开始时间和结束时间,到时分秒级别 如果不要时分秒,SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" ...

  7. 快速获取一天的开始时间和结束时间

    前言 在日常开发中,我们经常需要获取某一天的开始时间和结束时间,然后再去做一些逻辑处理.这里提供两种demo. java8之前 这种是采用手动设置日期的时分秒为需要的格式,具体代码如下 @Testpu ...

  8. calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...

    在进行频次.周期业务处理的时候,需要查询日.周.旬.月.季度.年等周期时间,为此而写的一个时间工具类. import java.text.ParseException; import java.tex ...

  9. oracle取本月最后一天是星期几_Oracle 获取本周、本月、本季、现年的第一天和最后一天...

    Oracle 获取本周.本月.本季.本年的第一天和最后一天 --本周 select trunc(sysdate,'d')+1 from dual; select trunc(sysdate,'d')+ ...

  10. Oracle 获取本周、本月、本季、本年的第一天和最后一天

    来源:https://www.cnblogs.com/cheng5x/p/6888158.html Oracle 获取本周.本月.本季.本年的第一天和最后一天 --本周 select trunc(sy ...

最新文章

  1. [转]Format a ui-grid grid column as currency
  2. python中文读音ndarray-numpy中的ndarray方法和属性详解
  3. Python学习笔记(Ⅰ)——Python程序结构与基础语法
  4. android transform xml xsl,XslCompiledTransform.Transform 方法 (System.Xml.Xsl) | Microsoft Docs
  5. ie8下修改input的type属性报错
  6. 【CodeForces - 1A】Theatre Square(水题,几何)(CODEFORCES,梦的开始)
  7. python实现随机抽取答题_如何在python中实现随机选择
  8. php flea,FleaPHP - 开发框架 - PHP开源网(PHP-OPEN.ORG)
  9. 炫龙dcpro黑苹果_毁灭者DC W650DC装黑苹果心得
  10. 深度:嵌入式系统的软件架构设计!
  11. 单端通用ISM频段接收器 Si4313
  12. js大屏导出图片_js将canvas保存成图片并下载
  13. 十个Python图像处理工具,不可不知!
  14. kali中无线密码的破解
  15. java语言【#106. 求绝对值】(已通过)
  16. 小程序云开发db封装
  17. 全员“拉踩”苹果,入局一年多的苹果芯片已成“行业标杆”?
  18. 1896-2021历届奥运会奖牌榜(Python数据处理)
  19. 发那科系统基本参数概述
  20. Java dom4j如何获取,添加,删除,查找,设置Element属性呢?

热门文章

  1. 二、GAMIT解算之数据准备
  2. SOLARIS SYSTEM COMMAND(个人整理笔记)
  3. 计算机排版原理,课外计算机排版原理(高级版) 7.ppt
  4. HCIP RS IERS题之OSPF(二)
  5. 花费9.9元使用使用中国知网
  6. 八类网线和七类网线的区别_七类网线和六类网线区别有哪些
  7. win10网络共享打印机设置
  8. 从月薪3000到月薪过万:做什么工作才能过上想要的生活
  9. RTA PAVIA CSD ET04-1 ET04
  10. java判断一个数是不是素数_Java判断一个数是不是素数