Java Calendar.set 方法设置时间的问题
因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。 变量有:开始时间--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 方法设置时间的问题的更多相关文章
- Calendar.set方法获取前一天的当前时刻
获取前几天的当前时刻的时间方法 Calendar cal = Calendar.getInstance(); Date date = new Date();// 获取当前时间 cal.setTime( ...
- Java Calendar 类的时间操作
Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- Java Calendar 类的时间操作.RP
JavaCalendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/a ...
- (干货)java中如何根据一个时间获取属于本年那一周,本周的开始时间以及最后一天时间。并且设置起始时间为周6.结束时间为周5
本人亲测,有用,适用性比较强,直接上代码说话. package com.helloBike.data; import java.text.ParseException; import java.tex ...
- java Calendar类得到每个月的周末是几号的工具方法
public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...
- (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...
- Java向mysql中插入时间的方法
ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...
随机推荐
- JQuery基础知识(2)
JQuery基础知识(2) JQuery滑动效果 1. JQuery slideDown(); 语法: $(selector).slideDown(speed,callback); 可选的 speed ...
- Oracle数据库和实例的区别
一般Oracle数据库(Oracle Database)可以分为两部分,即实例(Instance)和数据库(Database). 实例:是一个非固定的.基于内存的基本进程与内存结构.当服务器关闭后,实 ...
- NPM 简单实用说明
https://nodejs.org/en/download/ 下载并按照,直接下一步就可以,最后会在C:\Program Files 新建一个nodejs文件夹,里面有一个node.exe.双击就启 ...
- UITextField 之 手势收起键盘
1. 注册手势 /** * 注册手势 */ -(void)gestureReg{ //放弃第一响应者 UITapGestureRecognizer * tap = [[UITapGestureReco ...
- C语言strstr()函数:返回字符串中首次出现子串的地址
今天又学到了一个函数 头文件:#include <string.h> strstr()函数用来检索子串在字符串中首次出现的位置,其原型为: char *strstr( char *s ...
- 关于firefox启动就崩溃的问题
前些天在公司内网机器安装了Firefox Developer,每次启动直接就崩溃.最后发现问题出在Firefox的硬件加速上.解决办法: 1.右击firefox快捷方式,选择属性,在“目标”后面,即f ...
- thinkphp 配置项总结
'URL_PATHINFO_DEPR'=>'-',//修改URL的分隔符 'TMPL_L_DELIM'=>'<{', //修改左定界符 'TMPL_R_DELIM'=>'}&g ...
- 在ASP.NET MVC中使用 Bootstrap table插件
Bootstrap table: http://bootstrap-table.wenzhixin.net.cn/zh-cn/getting-started/ 1. 控制器代码: using Syst ...
- jQuery attr removeAttr 属性操作
jQuery attr removeAttr 属性操作 <%@ page language="java" import="java.util.*" pag ...
- JAVA中StringBuffer类常用方法
String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串 ...