最近在做项目的时候需要计算某年某月的最大天数.我用的是java 自带的calendar类类处理的.我最初的代码是:
Calendar cal = Calendar.getInstance();
// 年
cal.set(Calendar.YEAR, year);
// 月,因为Calendar里的月是从0开始,所以要-1
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
return formatDate(cal.getTime(), DEFAULT_DATE_FORMAT_S);
测试结果如下:
System.out.println(DateUtils.getLastDayOfMonth(2012,1));
System.out.println(DateUtils.getLastDayOfMonth(2012,2));
System.out.println(DateUtils.getLastDayOfMonth(2012,3));
2012-02-29
2012-03-31
2012-04-30
这显然是没有什么问题的,二月份的数据也正确,于是乎我就把这段代码部署到了正式环境.
这段代码在我的项目里跑了28天,,没有出现问题,知道月底项目有个结算的时候出现了问题,客户反馈说日期不对,我开始纳闷,发现结果确实不对,相同的测试数据,今天(比如是2012-4-30)得出的结果却不一样了:2012-03-02
2012-03-31
2012-04-30
我发现二月份的日期不对了,经过我的仔细的思考,发现这两次测试的唯一不同点就是我的本地时间,(上次测试的时间好比是:2012-4-2),我把日期调整到上次测试的时间,发现得到的结果又是正确的,经过我反复的推敲和验证,并google的一番,得出了结论:
如果你是直接new Calendar(),它采用的是当前系统时间,假设现在是4.31号,如果你把月份设置为2月,这个时候calendar会重新计算自己的时间,发现你把月份设置为2月,之后计算天数时,发现保存的天数还是4月的31天,这时候cal会自动增加月份到3.3号(假设这个2月是28天),
因为2月是放不下31天的.
解决方案:
解决方案就是每次更改月份之前应该把当期的日期天数设置为1, 其实只要小于28天,就会得到正确的数据. 代码:
Calendar cal = Calendar.getInstance();
// 年
cal.set(Calendar.YEAR, year);
// 月,因为Calendar里的月是从0开始,所以要-1
cal.set(Calendar.DATE,1);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
测试代码:System.out.println(DateUtils.getLastDayOfMonth(2012,1));
System.out.println(DateUtils.getLastDayOfMonth(2012,2));
System.out.println(DateUtils.getLastDayOfMonth(2012,3));
2012-02-29
2012-03-31
2012-04-30
分享到:
相关推荐
它使用.NET Framework的C#语言编写,并通过Visual Studio等IDE与Default.aspx页面进行绑定。 3. **App_Data**:这是一个标准的ASP.NET应用目录,用于存放应用程序的数据,如SQL Server Compact Edition、SQLite、...
【标题】"tju_calander"是一个基于JavaWeb技术开发的日历应用,旨在提供便捷的日期查询功能。在这个项目中,开发者可能运用了多种核心技术,包括Servlet、JSP、JavaBean以及相关的MVC设计模式,以实现用户友好的界面...
安装这个文件后,用户就可以在自己的电脑上开始使用这款高效的时间管理工具了。只需按照安装向导的步骤操作,就能轻松完成安装,开始享受"桌面日历"带来的便利。 总之,"桌面日历"是一款全面且实用的日历应用,它...
calander.github.io
|_ calendarContainer|_ calendarContainer 1配置对象由这些属性组成 |_ container - calander containers class |_ numOfDays - Number of days to be displayed in the calander |_ numOfDiabledRows - Number of...
College Management System In ...
这个"calander.rar"文件包含了一个用Java编写的简单日历应用,它可能使用了Java的标准库`java.time`包,该包在Java 8及更高版本中引入,为处理日期和时间提供了强大的支持。 在Java中,`java.time`包提供了多种类来...
AWS-AutoScaling-Google-Calander 允许您通过更改 Google Clander 中的事件来控制 AWS AutoScaling 组中所需服务器数量的脚本第一: npm install 第二:使用config/default.yaml作为基础在config/local.yaml配置您的...
本教程将详细探讨"日历calendar插件Demo",包括其核心功能、常见实现方式以及如何使用原生JavaScript实现一个英文时间日期插件Pikaday和百度的日历代码。 首先,日历插件的基本功能包括显示当前日期,选择日期,...
这是Google Calander API的示例集成 操作说明 将存储库克隆到本地设备。 导航到目录并键入“ npm install”以安装依赖项 键入“ npm start”以启动服务器。 查看工作在 支持 如有任何疑问和错误,请发送电子邮件...
该工具类用于两个时间段之间节假日的计算(可获取两个时间段之间的节假日天数,小时,分钟,秒)
这是一个在 windows 8 中显示伊朗(shamsi 或 Jalali)日历的小应用程序。在这里,我们试图在一个小应用程序中展示 windows 8 中动态... 此应用程序使用 Microsoft Visual Studio Express 2012 RC for windows 8 开发
一个使用Flutter 编写的日历组件 使用 import 'package:flutter_prada_calendar/calendar.dart'; Map<DateTime> map; map = new Map(); map.putIfAbsent(new DateTime.now(), () { return 2; }); new ...
对于复杂的时间计算和格式化,可以使用`SimpleDateFormat`或Java 8引入的`DateTimeFormatter`。 总的来说,Java的`Calendar`类是处理日期和时间的核心工具,虽然在Java 8后有新的API取代,但在大量存在的旧代码和库...
从压缩包子文件的文件名称"Wallcal"来看,这是软件的简称或者安装文件名,用户可以通过这个文件来安装和使用Wallpaper Calendar。通常,这样的文件会包含应用程序的全部代码和资源,使得用户可以在本地计算机上运行...
引用成功后,控件会出现在工具箱中,可以直接拖放到窗体上使用。 2. **控件属性**:CnCalendar控件提供了一系列属性来配置其行为和外观,如“日期”属性用于设置或获取当前选中的日期,"显示模式"属性可以设置控件...
版本号的提升往往伴随着新功能的添加、错误修复以及性能优化,确保用户能够获得更好的使用体验。 总的来说,CalendarWallpaper日历壁纸生成器是结合了美学和实用性的工具,它将个性化的设计与功能性完美融合,帮助...
您可以简单地使用JavaScript代码发送电子邮件,在Google电子表格中添加CRUD数据,将文件上传到Google驱动器,在Google calander上设置/删除提醒等等。 简而言之,您可以使用我为MIT Appinventor及其扩展及其Niotron...
在Android 8.0系统中,内置的日历应用(Calendar)是用户管理和组织日常事务的重要工具。这个应用不仅提供基本的日历视图,包括日、周、月和年视图,还支持事件创建、提醒设置以及与其他日历同步等功能。...
weex_android_calander 一款weex和原生混合开发的小应用,由于没有自己去实现接口,借用了小米的一些接口,特此申明,只是用来学习交流,不存在侵权行为,如果存在侵权行为,请第一时间告知,我们将及时处理。 1、...