今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样的方法,所以上网查了相关的资料,有两个方法:分别是set和roll方法,这两个方法的具体使用方法如下:

package com.java.demo;

import java.util.Calendar;

public class DateUtil {

	public static void main(String[] args){
//当前时间
Calendar cl = setCalendar(2014,01,01);
System.out.print("当前时间:");
printCalendar(cl);
//前一天
cl = setCalendar(2014,01,01);
getBeforeDay(cl);
System.out.print("前一天:");
printCalendar(cl);
//后一天
cl = setCalendar(2014,01,01);
getAfterDay(cl);
System.out.print("后一天:");
printCalendar(cl);
} /**
* 设置时间
* @param year
* @param month
* @param date
* @return
*/
public static Calendar setCalendar(int year,int month,int date){
Calendar cl = Calendar.getInstance();
cl.set(year, month-1, date);
return cl;
} /**
* 获取当前时间的前一天时间
* @param cl
* @return
*/
private static Calendar getBeforeDay(Calendar cl){
//使用roll方法进行向前回滚
//cl.roll(Calendar.DATE, -1);
//使用set方法直接进行设置
int day = cl.get(Calendar.DATE);
cl.set(Calendar.DATE, day-1);
return cl;
} /**
* 获取当前时间的后一天时间
* @param cl
* @return
*/
private static Calendar getAfterDay(Calendar cl){
//使用roll方法进行回滚到后一天的时间
//cl.roll(Calendar.DATE, 1);
//使用set方法直接设置时间值
int day = cl.get(Calendar.DATE);
cl.set(Calendar.DATE, day+1);
return cl;
} /**
* 打印时间
* @param cl
*/
public static void printCalendar(Calendar cl){
int year = cl.get(Calendar.YEAR);
int month = cl.get(Calendar.MONTH)+1;
int day = cl.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+day);
} }

上面的代码就是说明了set方法和roll方法的使用,传入一个Calendar,进行设置之后返回一个Calendar,但是roll和set有一个区别:为了测试出这两个方法的却别,我们将时间设置成一个边界值:2014-01-01:看运行效果:

是通过set方法进行设置的时间的效果图:

通过效果图我们可以看到,set方法获取前一天和后一天的时间是没有任何问题的。下面再来看一下roll方法获取前一天和后一天的时间的效果图:

我们发现在获取前一天的时间的时候出现问题了,就是2014-01-01获取前一天是2014-01-31,由此我们可以看到,roll方法在获取前一天和后一天的时候并不是级联改动的,只会修改当前的day,而不会考虑year和month,当然他在修改day的时候是一个循环的修改,如:1月份是:1-31,就是一个循环。

通过上面的分析我们看到了set方法和roll方法的却别了。

Java中获取前一天和后一天时间的更多相关文章

  1. java 根据系统日期获取前一天、后一天时间(根据初始日期推算出期望(向前/向后)日期)

      1.情景展示  java 根据系统当前日期获取前一天日期.后一天日期,或者根据初始日期推算出期望(向前/向后)日期. 2.解决方案 导包 import java.text.ParseExcepti ...

  2. java中获取比毫秒更为精确的时间

    所以这里提醒做非常精确的时间统计的朋友,谨慎使用System.currentTimeMillis() . 在Java中可以通过System.currentTimeMillis()或者System.na ...

  3. java日期获取前一天和后一天

    import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import j ...

  4. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  5. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  6. JAVA中获取当前系统时间及格式转换

    JAVA中获取当前系统时间   一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...

  7. JAVA中获取路径

    内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...

  8. JAVA中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...

  9. java中获取路径中的空格处理(%20)问题

    在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误. 解决办法: String path = Parameter.class.getReso ...

随机推荐

  1. 设置overflow:auto无效的解决办法

    做项目中经常要用到滚动条,有时候给div设置overflow无效. 遇到这样的问题,只需要在 F12 Elements面板检查一下要设置overflow的元素的宽高是否大于父级元素宽高. (overf ...

  2. sping+quartz定时任务的最简单实践

    1,启动spring容器 Tomcat启动的时候,加载web.xml的listener和context-param,spring的listener监听到对应的contextConfigLocation ...

  3. flexbox布局一

    flexbox布局是一种新的css布局,flex是flexible的简写,所以flexbox就可以理解为可伸缩布局.而可伸缩性也是flexbox布局的亮点,至于如何可伸缩,看完下面的介绍大家应该就会有 ...

  4. rstrip

    ====== rstrip ====== Description Returns a copy of the string with trailing characters removed. Synt ...

  5. Java中的List集合

    List集合继承自collection接口,他自己也是个接口,没有具体的结构,与Set集合不同,List集合允许重复的元素. List集合特有方法:(Collection中没有这些) 这些在Arral ...

  6. Python 爬取各大代理IP网站(元类封装)

    import requests from pyquery import PyQuery as pq base_headers = { 'User-Agent': 'Mozilla/5.0 (Windo ...

  7. (动态改变数据源遇到的问题)ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

    在动态改变数据源时 hibernate配置不能使用Oracle官方的方言(org.hibernate.dialect.Oracle10gDialect) 做法写一个方言扩展类,缺什么类型,添加什么类型 ...

  8. 导入安全证书到jdk

    一:.导入证书 1.打开doc窗口,打开cmd,执行命令: keytool -import -file f:\ca.crt -keystore "%JAVA_HOME%\jre\lib\se ...

  9. UVA - 143 Orchard Trees (点在三角形内)

    题意: 给出三角形的三个点的坐标(浮点数),     问落在三角形内及三角形边上的整点有多少? 思路:所有点暴力判断(点的范围1-99,三角形可能是0-100,因为这个WA了一下orz) AC代码: ...

  10. 【Linux】- Systemd 实战篇

    转自:阮一峰的网络日志 一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下 ...