因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。  变量有:开始时间--startDate,结束时间--endDate。

逻辑很简单:获取到开始时间的月份和结束时间的月份,然后得到月份差值,进行for循环遍历,遍历的时候判断用户注册的时间是否在这个月里,然后得出结果。

关键就在于:判断用户注册的时间是否在这个月里。

想了一个办法:假如一个用户的注册时间是 2016-09-05 22:05 ,那么判断这个用户的 注册时间是否小于 [2016-09-30 23:59] 就可以了。

好了,逻辑清楚了,问题来了:怎么获取每个月份的最大时间(每个月的最后一天、最后一小时、最后一分钟、最后一秒)呢?

查了查Java的api 发现官方推荐使用 java.util.Calendar; 而 java.util.Date; 里面的很多方法都已经不被推荐使用了。 比如:Date.getDate();

Calendar很好用 采用的是单例模式,通过:Calendar.getInstance();获取他的实例。使用Calendar.setTime(Date date);设置时间 。

代码:

 //获取实例
Calendar calendarInstance = Calendar.getInstance();
//设置时间
calendarInstance.setTime(startTime);

好了重点来了,假如当前Calendar实例的时间是:2016-09-05 22:05 ,则变化到最大的时间为:2016-09-30 23:59 

看代码:

 //设置每月的最大天数
calendarInstance.set(Calendar.DAY_OF_MONTH, calendarInstance.getActualMaximum(Calendar.DAY_OF_MONTH));
//设置每天的最大小时
calendarInstance.set(Calendar.HOUR_OF_DAY, calendarInstance.getActualMaximum(Calendar.HOUR_OF_DAY));
//设置每小时最大分钟
calendarInstance.set(Calendar.MINUTE, calendarInstance.getActualMaximum(Calendar.MINUTE));
//设置每分钟最大秒
calendarInstance.set(Calendar.SECOND, calendarInstance.getActualMaximum(Calendar.SECOND));

Calendar 的set方法可以设置时间中的值比如:

Calendar.SECOND  秒
Calendar.MINUTE  分钟
等等

Calendar 的getActualMaximum方法可以得到单位时间的最大值。比如:每月最多有几天,每天最多几个小时等等

这样就得到了已知时间在单位时间(每个月)内的最大值。同理单位时间为每天的话,类似的道理。

这还没完呢。

整个程序里只有两个变量,开始和结束的时间,中间的时候需要手动加。

2016-09-05 22:05 的下个月的最大时间应该是:2016-10-31 23:59

我一开始用的方法是:

calendarInstance.set(Calendar.MONTH, calendarInstance.get(Calendar.MONTH) + 1 );

发现bug,当开始时间的月份有31天的话,这样得出的结果就是下下个月 比如:开始时间--2016-05-31 23:59  转换后的时间是--2016-07-01 23:59

怎么会多一个月?

想来想去猜测是这个原因:5月有31天。而6月只有30天 如果直接使用 set方法设置月份的话,就得到 6月31号 但是6月没有31号于是 Calendar 自动进位,就变成了 7月01号。

解决办法是:使用Calendar.add(int field, int amount); 第一个参数是 字段(月份,天,小时..),第二个参数是 增量。

这样就可以直接从 5月31号 变成6月30号了。

欢迎加入 java开发群:497036534。

Java Calendar.set 方法设置时间的问题的更多相关文章

  1. Calendar.set方法获取前一天的当前时刻

    获取前几天的当前时刻的时间方法 Calendar cal = Calendar.getInstance(); Date date = new Date();// 获取当前时间 cal.setTime( ...

  2. Java Calendar 类的时间操作

    Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java ...

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

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

  4. Java Calendar 类的时间操作.RP

    JavaCalendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/a ...

  5. (干货)java中如何根据一个时间获取属于本年那一周,本周的开始时间以及最后一天时间。并且设置起始时间为周6.结束时间为周5

    本人亲测,有用,适用性比较强,直接上代码说话. package com.helloBike.data; import java.text.ParseException; import java.tex ...

  6. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...

  7. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  8. (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

  9. Java向mysql中插入时间的方法

    ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源  java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...

随机推荐

  1. iOS 之 NSString 去除前后空格和回车键

    NSString *string = @" spaces in front and at the end "; NSString *trimmedString = [string ...

  2. js原生继承之——类式继承实例(推荐使用)

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. Android事件处理概述

    不管是桌面应用还是手机应用程序,面对最多的就是用户,经常需要处理的就是用户的动作——也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理. Android提供了强大的事件处理机制,包 ...

  4. 交叉验证(cross validation)

    转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...

  5. ImageView及其子类(二)

    实例:强大的图片按钮 下面的实例定义了多个图片按钮,并定义了两个ZoomButton.两个ZoomButton的android:src属性分别指定为@android:drawable/btn_minu ...

  6. Flash安全的一些总结

    整理了下Flash安全相关的知识,后面会再完善 一.先来说crossdomain.xml这个文件 flash如何跨域通信,全靠crossdomain.xml这个文件.这个文件配置在服务端,一般为根目录 ...

  7. libcurl模拟登录CSDN并自动评论资源以获取积分

    软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求.发送cookie给服务器.保存coo ...

  8. requests从api中获取数据并存放到mysql中

    python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...

  9. Apache Arrow 内存数据

    1.概述 Apache Arrow 是 Apache 基金会全新孵化的一个顶级项目.它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度. 2.内容 现在大数据处理模型很多,用户在应 ...

  10. OCR技术浅探: 语言模型(4)

    由于图像质量等原因,性能再好的识别模型,都会有识别错误的可能性,为了减少识别错误率,可以将识别问题跟统计语言模型结合起来,通过动态规划的方法给出最优的识别结果.这是改进OCR识别效果的重要方法之一. ...