获得指定时间的下一天的N种方法
有时候在进行日期计算的时候需要对日期进行加减,比如给定一个时间T,我们需要查找T到T+1的数据,最简单的方法就是转换成毫秒后加上一天对应的毫秒数,再转换回来,但是这样显得不够优雅,那么Java中有哪些方法可以实现这个功能呢?下面进行了总结:
方法一:基本方法
Date now = new Date();
Date date = new Date(now.getTime() + (1000 * 60 * 60 * 24));
看似正确的方法,其实里面是有坑的。
仔细阅读java.util.Date的注释,可以发现,对于一天的定义,根据Java虚拟机运行的环境,是有区别的。
主要在于两点:
1. 闰秒(leap second):每一两年有额外的一秒钟,加在6月30日或12月31日的最后一秒。
关于闰秒的知识可以参考陈皓:关于闰秒(leap second)的小知识
我写程序试了下,没有这个效果,不知道是不是时区的问题。
2. 夏令时(Daylight Savings Time,DST):一般在天亮早的夏季人为将时间提前一小时,各国的规则不一样。
关于夏令时的知识可以参考百度百科,关于夏令时的实验,可以查看Java中夏令时带来的Date不一致问题
好在现在中国已经不使用夏令时了,在这之后的时间操作都没有问题,不过万一哪天又开始启用了夏令时,用这种方法的程序很可能遇到各种诡异的问题。
方法二:使用java.util.Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, 1);
Date date = calendar.getTime();
没什么问题,只不过要多写几行代码。
方法三:使用joda-time
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime.plusDays(1);
非常的清晰优雅。
方法四:Java 8
Java 8也可以实现该功能,代码与joda-time一致,关于JDK 8中的LocalDateTime可以参见官方文档。
参考:How to add one day to a date?
获得指定时间的下一天的N种方法相关推荐
- 每日10行代码67:openpyxl指定工作表(sheet)的5种方法
20210330更新了部分内容. 今天工作时,写了一小段代码,大概功能就是比对excel里的数据与数据库里的数据差异,具体实现就是根据excel里维度列(就是sql中where后的部分)到数据库查找相 ...
- python怎么建立字典翻译_Python下字典创建的8种方法
Python下字典创建的几种方法记录 1.创建空字典 >>> info_dict = {} >>> print(type(info_dict)) 2.赋值直接生成 ...
- linux删除test文件夹,Linux删除目录下的文件的几种方法
Linux删除目录下的文件的几种方法 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文件 2.find . -type f -delete或find . -typ ...
- linux删除目录或文件命令行,Linux删除目录下的文件的10种方法小结
看到了一遍文章,便突发奇想的想起Linux中删除目录下的所有文件的方法:整理了几个,如有不足,还望读者不吝赐教! 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文 ...
- Java selenium操作下拉滚动条的几种方法
数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法 我这里演示的是Java ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...
- winxp一键锁定计算机,WinXP下锁定计算机的3种方法
WinXP下锁定计算机的3种方法 2009-12-08 04:53:11 脚本之家 这两个按钮的设置方式共有3种: 1.不使用欢迎屏幕(此时亦不能使用快速用户切换). 2.仅使用欢迎屏幕. 3.既使用 ...
- linux系统调用劫持隐藏进程,linux 下隐藏进程的一种方法及遇到的坑
前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫 ...
- java excel 数据有效性_Excel设置数据有效性实现单元格下拉菜单的3种方法
Excel设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的"数据"→"有效性"→出现&qu ...
最新文章
- IL,Emit之OpCodes说明(备查)
- 在腾讯做只有10万人用的产品,这群工程师竟然还很高兴
- windbg bp condition
- XML解析---JAVAEE学习之路
- Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
- 11.21 if条件语句 年月日执行判断
- matlab火箭升空问题,困扰火箭的三大问题终于要解决了!球迷:我都要膨胀了!...
- 开发了一套python的七牛sdk
- lhdc协议是什么_无线耳机标注的编码是什么意思?看懂了会少很多坑
- 创建一个超链接,点击这个超链接,显示数据库中的数据信息:MVC模式查询
- VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文
- MySQL高级面试题
- 2020-12-30
- c4d流体插件_C4D的Jet Fluids免费流体插件
- 软件质量控制、质量保证和质量管理区别
- Gyro-3电子陀螺二次开发
- 《学习Oracle从这里开始》之常用SQL篇
- html2canvas黑背景,解决canvas转base64/jpeg时透明区域变成黑色背景的方法
- 蓝牙音箱方案硬件架构介绍
- HTML5期末大作业:关于我的家乡主题设计——四川成都(4页) HTML+CSS+JavaScript
热门文章
- JavaScript原型链污染攻击
- Android 的 fdsan 文件描述符相关介绍
- 简历里项目经历怎么写,没有项目经历怎么办?
- DGIOT国内首家轻量级物联网开源平台——三千万电表集抄压测
- Python 课课练 (六):列表、元组课后练习题
- 信息学奥赛一本通 1333:【例2-2】Blah数集 | OpenJudge NOI 3.4 2729:Blah数集
- 高中数学必修5知识点:第三章不等式
- 滕达路由器拉网线最大线长不超过50米
- 呵呵年薪十万都干什么工作
- RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略