因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。  变量有:开始时间--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);设置时间 。

代码:

1 //获取实例

2 Calendar calendarInstance =Calendar.getInstance();3 //设置时间

4 calendarInstance.setTime(startTime);

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

看代码:

1 //设置每月的最大天数

2 calendarInstance.set(Calendar.DAY_OF_MONTH, calendarInstance.getActualMaximum(Calendar.DAY_OF_MONTH));3 //设置每天的最大小时

4 calendarInstance.set(Calendar.HOUR_OF_DAY, calendarInstance.getActualMaximum(Calendar.HOUR_OF_DAY));5 //设置每小时最大分钟

6 calendarInstance.set(Calendar.MINUTE, calendarInstance.getActualMaximum(Calendar.MINUTE));7 //设置每分钟最大秒

8 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 设置小时_Java Calendar.set 方法设置时间的问题相关推荐

  1. java calendar 设置小时_Java Calendar类的时间操作

    Java Calendar 类时间操作,这也许是创建日历和管理最简单的一个方案,示范代码很简单,演示了获取时间,日期时间的累加和累减,以及比较. 注意事项: Calendar 的 month 从 0 ...

  2. java date 减小时_java 获取本机当前时间并对小时任意加减

    展开全部 代码如下: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; publ ...

  3. 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

    文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...

  4. Java 中array.size()_Java ArrayDeque size()方法与示例

    ArrayDeque类size()方法size()方法在java.lang包中可用. size()方法用于返回存储在此双端队列中的大小(元素数). size()方法是一个非静态方法,只能通过类对象访问 ...

  5. java paint的使用_java使用paint方法画图的方法

    java使用paint方法画图的方法 发布时间:2020-08-24 12:06:15 来源:亿速云 阅读:98 作者:小新 小编给大家分享一下java使用paint方法画图的方法,希望大家阅读完这篇 ...

  6. java背景颜色代码_java窗口背景颜色设置

    窗口背景颜色是指直接调用JFrame或者Frame的setBackground(Color color)方法设置后显示出来的颜色. 如果直接调用这个方法后,的确设置了背景颜色,但看到的却不是直接的JF ...

  7. java图形界面设置背景_java窗口背景颜色设置

    详细内容 窗口背景颜色是指直接调用JFrame或者Frame的setBackground(Color color)方法设置后显示出来的颜色. 如果直接调用这个方法后,的确设置了背景颜色,但看到的却不是 ...

  8. java printstream 覆盖了_Java PrintStream clearError()方法与示例

    PrintStream ClassclearError()方法clearError()方法在java.io包中可用. clearError()方法用于清除此PrintStream的内部错误状态. cl ...

  9. java中扫描仪程序_Java扫描仪delimiter()方法及示例

    扫描仪类delimiter()方法delimiter()方法在java.util包中可用. delimiter()方法用于检索当前与分隔符匹配的Scanner的模式. delimiter()方法是一种 ...

最新文章

  1. Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入
  2. 亿级流量架构之分布式事务思路及方法
  3. 2019年上半年收集到的人工智能机器学习方向干货文章
  4. C Operator | and can also operate bool operands
  5. Visual C#使用DirectX实现视频播放
  6. 多线程生成随机数组+多线程快速排序(C++实现)
  7. “网红” WebAssembly 与 K8s 如何实现双剑合璧?
  8. java中对象的生存期_Java中对象的生存周期
  9. u盘启动pxe安装linux,U盘启动安装centos5.5+centos6.3+PXE网络安装CentOS
  10. CNN+Transformer=Better,国科大华为鹏城实验室提出Conformer,84.1% Top-1准确率
  11. Struts中 s checkboxlist 的用法
  12. CMMI证书有效期是多久?到期后自己可以办理吗
  13. 流行前端几大UI框架排行榜
  14. CATIA二次开发—API梳理
  15. 智慧时代正向我们走来(一)
  16. 计算机语言中的计数器是什么,程序计数器的作用_程序计数器pc中存放的是什么...
  17. 【MATLAB-app】appdesigner 灰色区域 代码 如何修改?
  18. 十大超极本:联想U系列上榜
  19. 通过模板匹配先定位检测的对象再检测圆形零件和孔针02
  20. jquery 下拉列表框 改变 动态 改变相应值

热门文章

  1. 淘宝店铺应用android源码
  2. R语言使用plot函数可视化数据散点图,使用cex.sub参数自定义设置次标题的字体大小(subtitle)
  3. c语言正则表达式查找字符串长度,c语言实现正则表达式匹配
  4. python 长整型_Python整型运算之布尔型、标准整型、长整型操作示例
  5. php下用redis解决秒杀超卖问题
  6. ISE中chipscope的使用教程
  7. python学习 字符串函数
  8. php根据周 星期实现课表,【php智能课表】选取某个日期段的周几,获取周几对应的日期...
  9. 2021通信安全员考试及(安全员)模拟考试单选题答案解析
  10. linux (centos7) 如何破解UltraEdit