Calendar类set方法中的坑
最近写了一个支付宝微信对账报表,发现系统金额比支付宝微信的少好多,左查右查发现是追缴金额没统计到,再一查发现月结束日期为2019-09-31,9月咋会有31,为啥呢就追缴金额不行呢,因为其他类型用TIMESTAMP即使9.31不对也能统计到,而追缴用的时间戳存为int值,UNIX_TIMESTAMP('2019-09-31 23:59:59')转换为0.000000导致结束时间不对where条件查询就有问题。
在仔细一查发现工具类中有一个获取月份最大值,问题就出现在这里咯。代码很简单
public static int LastDay(int month) {
Calendar calendar = Calendar.getInstance(); //获取当前时间
calendar.set(Calendar.MONTH, month-1); //设置月份
int maxday =calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //获取最大值
return maxday;
}
然后我发现无论传什么进去最大值都是31。
在System.out.println(calendar.getTime());打印出当前时间看看。发现如果传进去的月份有31号,那么就打印当月31号,如果没有31号就为下个月的1号。输入二月时输出为3号。
输入二月份debug一下,
Calendar.getInstance()值为2019-10-31如下图

calendar.set(Calendar.MONTH, 2-1)设置为二月如下图,发现DAY_OF_MONTH=31,依然为31号

System.out.println(calendar.getTime())一下,输出为2019-03-03,2019-02-31转为2019-03-03

calendar.getActualMaximum(Calendar.DAY_OF_MONTH)输出值为31,由此可见,不能只设置月份,要整个clear掉,重新设置年月,这样才会根据月份取最大值,不然会取到DAY_OF_MONTH的值。
解决方案一:
/**
* 获取某年某月的日期最大值
* @param year 年份
* @param month 月份
* @return 最大值
*/
public static int LastDay(int year , int month) {
Calendar calendar = Calendar.getInstance();
calendar.clear(); //清除所有日期数据
if (year != 0 ) {
calendar.set(Calendar.YEAR, year);
}
calendar.set(Calendar.MONTH, month-1);
int maxday =calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return maxday;
}
解决方案二:
/**
* 根据年月获取当月最后一天
* @param yearmonth yyyy-MM
* @return yyyy-MM-dd
* @throws ParseException
*/
public static String getLastDayOfMonth(String yearmonth) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
Date dd = format.parse(yearmonth);
Calendar cal = Calendar.getInstance();
cal.setTime(dd);
int cc=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
String result = yearmonth+"-"+cc;
return result;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Calendar类set方法中的坑的更多相关文章
- c++ 类覆盖方法中的协变返回类型
c++ 类覆盖方法中的协变返回类型 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型.这样的类型称为协变返回类型(Covarian ...
- php反射获取类和方法中的注释
通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释 所用到的主要类及其方法 ReflectionClass ReflectionClass::getDocComment ...
- java.uti.Random类nextInt方法中随机数种子为47的奇怪问题
一,问题描述 需要生成一个[0,1]的随机数.即随机生成 0 或者 1.使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个 ...
- final在类和方法中的使用
package final0; //final修饰的类不能继承//final修饰的方法不能继承public class TestFinal3 { public static void main(Str ...
- python中对类的方法中参数self的理解
我们通过下面的代码来对参数self进行理解 #coding:utf-8 2 class washer(): 3 def wash(self): 4 print("洗衣服") 5 p ...
- PHP加载另一个文件类的方法
加载另一个文件类的方法 当前文件下有a.php 和b.php,想要在class b中引入class a <?php class a { public $name = ' ...
- java:通过Calendar类正确计算两日期之间的间隔
在开发Android应用时偶然需要用到一个提示用户已用天数的功能,从实现上来看无非就是持久化存入用户第一次使用应用的时间firstTime(通过SharedPreferences .xml.sqlit ...
- 构造方法概念,自定义构造(init)方法的用途, 类工厂方法(就是直接用类名 类调用)
一. 构造方法 构造方法:在OC中init开头的方法, 我们称之为构造方法 构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 // 比如我们定义一个Person的类,然后 ...
- Calendar类中add/set/roll方法的区别
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
随机推荐
- 使用WIFI网卡 wpa_supplicant
在上篇文章中,编译了应用程序iw,它使得我们的开发板可以通过usb wifi网卡连接到无线热点,为了方便实验,我们采用了手机设置了无线热点.对手机的热点有4中安全方式:无WEPWPAWPA2使用iw工 ...
- 前端js判空处理,js字符串判空,js数组判空
1.字符串 在 js 中,字符串为空会有这么几种形式,"",null,undefined,如果在已知变量为空串的情况下可以直接采用 if (string.length == 0) ...
- Ansible常用模块整理
问答题 请总结今天所学的ansible模块,以及各个模块的作用! ping ping模块用来检查目标主机是否在线 例子:ansible webserver -m ping yum yum模块用来在Ce ...
- 并发设计模式:Immutability模式
多个线程同时读写同一共享变量存在并发问题,其中的必要条件之一就是 读写 ,如果没有写,只存在读,是不会存在并发问题的. 如果让一个共享变量只有读操作,没有写操作,如此则可以解决并发问题.该理论的具体实 ...
- Docker入门笔记(Centos7)
centos7 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo vim docker-c ...
- makefile通用版本(三)
DIR_INC = ./include DIR_SRC = ./src DIR_OBJ = ./obj DIR_BIN = ./bin DIR_LIB = -Wl,-rpath=/home/exbot ...
- CSS 分割线
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Salesforce Lightning开发学习(三)Component表单初解
初步了解了Lightning的组件开发流程后,我们来认识下lightning的表单 点击对象管理器,选择对象:电影(Movie__c),创建字段 标签 API 数据类型 票价 Number__c ...
- 深入理解 HTTP/1.x、HTTP/2 和 HTTPS
很多站长可能到现在都没有理解 HTTP/1.x.HTTP/2 和 HTTPS 之间的区别和关系吧?说实话,明月也是“一知半解”的水准而已,今天看到了这篇文章感觉总结还算是比较全面,特此分享出来给大家就 ...
- Elasticsearch详解
Elasticsearch详解 Chandler_珏瑜 关注 5.8 2019.05.05 17:19* 字数 10971 阅读 1147评论 5喜欢 36 5.1 Lucene简介 Lucene ...