有时候在进行日期计算的时候需要对日期进行加减,比如给定一个时间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种方法相关推荐

  1. 每日10行代码67:openpyxl指定工作表(sheet)的5种方法

    20210330更新了部分内容. 今天工作时,写了一小段代码,大概功能就是比对excel里的数据与数据库里的数据差异,具体实现就是根据excel里维度列(就是sql中where后的部分)到数据库查找相 ...

  2. python怎么建立字典翻译_Python下字典创建的8种方法

    Python下字典创建的几种方法记录 1.创建空字典 >>> info_dict = {} >>> print(type(info_dict)) 2.赋值直接生成 ...

  3. linux删除test文件夹,Linux删除目录下的文件的几种方法

    Linux删除目录下的文件的几种方法 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文件 2.find . -type f -delete或find . -typ ...

  4. linux删除目录或文件命令行,Linux删除目录下的文件的10种方法小结

    看到了一遍文章,便突发奇想的想起Linux中删除目录下的所有文件的方法:整理了几个,如有不足,还望读者不吝赐教! 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文 ...

  5. Java selenium操作下拉滚动条的几种方法

    数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法 我这里演示的是Java ...

  6. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  7. winxp一键锁定计算机,WinXP下锁定计算机的3种方法

    WinXP下锁定计算机的3种方法 2009-12-08 04:53:11 脚本之家 这两个按钮的设置方式共有3种: 1.不使用欢迎屏幕(此时亦不能使用快速用户切换). 2.仅使用欢迎屏幕. 3.既使用 ...

  8. linux系统调用劫持隐藏进程,linux 下隐藏进程的一种方法及遇到的坑

    前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫 ...

  9. java excel 数据有效性_Excel设置数据有效性实现单元格下拉菜单的3种方法

    Excel设置数据有效性实现单元格下拉菜单的3种方法 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的"数据"→"有效性"→出现&qu ...

最新文章

  1. IL,Emit之OpCodes说明(备查)
  2. 在腾讯做只有10万人用的产品,这群工程师竟然还很高兴
  3. windbg bp condition
  4. XML解析---JAVAEE学习之路
  5. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
  6. 11.21 if条件语句 年月日执行判断
  7. matlab火箭升空问题,困扰火箭的三大问题终于要解决了!球迷:我都要膨胀了!...
  8. 开发了一套python的七牛sdk
  9. lhdc协议是什么_无线耳机标注的编码是什么意思?看懂了会少很多坑
  10. 创建一个超链接,点击这个超链接,显示数据库中的数据信息:MVC模式查询
  11. VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文
  12. MySQL高级面试题
  13. 2020-12-30
  14. c4d流体插件_C4D的Jet Fluids免费流体插件
  15. 软件质量控制、质量保证和质量管理区别
  16. Gyro-3电子陀螺二次开发
  17. 《学习Oracle从这里开始》之常用SQL篇
  18. html2canvas黑背景,解决canvas转base64/jpeg时透明区域变成黑色背景的方法
  19. 蓝牙音箱方案硬件架构介绍
  20. HTML5期末大作业:关于我的家乡主题设计——四川成都(4页) HTML+CSS+JavaScript

热门文章

  1. JavaScript原型链污染攻击
  2. Android 的 fdsan 文件描述符相关介绍
  3. 简历里项目经历怎么写,没有项目经历怎么办?
  4. DGIOT国内首家轻量级物联网开源平台——三千万电表集抄压测
  5. Python 课课练 (六):列表、元组课后练习题
  6. 信息学奥赛一本通 1333:【例2-2】Blah数集 | OpenJudge NOI 3.4 2729:Blah数集
  7. 高中数学必修5知识点:第三章不等式
  8. 滕达路由器拉网线最大线长不超过50米
  9. 呵呵年薪十万都干什么工作
  10. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略