JAVA中获得一个月最大天数的方法

参考博客:http://www.cnblogs.com/relucent/p/4566582.html

Calendar 类是一个抽象类,为日历字段之间的转换提供了一些方法。
其中有一个重要方法 getActualMaximum ,该方法用于返回指定日历字段实际的最大值。

利用这个方法(Calendar.getActualMaximum),我们可以获得某年某月的天数。

代码如下:

  1. /**
  2. * 获得某个月最大天数
  3. *
  4. * @param year 年份
  5. * @param month 月份 (1-12)
  6. * @return 某个月最大天数
  7. */
  8. public int getMaxDayByYearMonth(int year, int month) {
  9. Calendar calendar = Calendar.getInstance();
  10. calendar.set(Calendar.YEAR, year);
  11. calendar.set(Calendar.MONTH, month-1);
  12. return calendar.getActualMaximum(Calendar.DATE);
  13. }

备注:以上代码有两个需要注意的地方:

① Calendar除了getActualMaximum方法之外,还有一个看起来类似的方法getMaximum,但是这两个方法是不同的:
getActualMaximum 返回实际的最大数值,getMaximum 返回的是可能的最大数值。
上面的代码如果改成getMaximum,那么一般情况都会恒定的返回31 (月份中可能的最大天数是31)

② Calendar 的月份取值范围是 0 - 11 , 0代表1月 11代表12月份
(这是因为Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们操作月份的时候会根据需要做 +1 或 -1 的处理)

获取年月日时分秒星期

  1. public void test1() {
  2. // 获取年
  3. int year = calendar.get(Calendar.YEAR);
  4.  
  5. // 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
  6. int month = calendar.get(Calendar.MONTH) + 1;
  7.  
  8. // 获取日
  9. int day = calendar.get(Calendar.DAY_OF_MONTH);
  10.  
  11. // 获取时
  12. int hour = calendar.get(Calendar.HOUR);
  13. // int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时表示
  14.  
  15. // 获取分
  16. int minute = calendar.get(Calendar.MINUTE);
  17.  
  18. // 获取秒
  19. int second = calendar.get(Calendar.SECOND);
  20.  
  21. // 星期,英语国家星期从星期日开始计算
  22. int weekday = calendar.get(Calendar.DAY_OF_WEEK);
  23.  
  24. System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour+ "时" + minute + "分" + second + "秒" + "星期" + weekday);
  25. }

一年后的今天

  1. // 一年后的今天
  2. @Test
  3. public void test2 () {
  4. // 同理换成下个月的今天calendar.add(Calendar.MONTH, 1);
  5. calendar.add(Calendar.YEAR, 1);
  6.  
  7. // 获取年
  8. int year = calendar.get(Calendar.YEAR);
  9.  
  10. // 获取月
  11. int month = calendar.get(Calendar.MONTH) + 1;
  12.  
  13. // 获取日
  14. int day = calendar.get(Calendar.DAY_OF_MONTH);
  15.  
  16. System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日1 }
  17.  
  18. }

获取任意一个月的最后一天

  1. @Test
  2. public void test3 () {
  3. // 假设求6月的最后一天
  4. int currentMonth = 6;
  5. // 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量
  6. //
  7. calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
  8. calendar.add(Calendar.DATE, -1);
  9. // 获取日
  10. int day = calendar.get(Calendar.DAY_OF_MONTH);
  11. System.out.println("6月份的最后一天为" + day + "号");
  12. }

设置日期(注意:设置月份是8月,得到就是8月,不用加1)

  1. public void test4 () {
  2. calendar.set(Calendar.YEAR, 2000);
  3. System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");
  4.  
  5. calendar.set(2008, 8, 8);
  6. // 获取年
  7. int year = calendar.get(Calendar.YEAR);
  8.  
  9. // 获取月
  10. int month = calendar.get(Calendar.MONTH);
  11.  
  12. // 获取日
  13. int day = calendar.get(Calendar.DAY_OF_MONTH);
  14.  
  15. System.out.println("现在是" + year + "年" + month + "月" + day + "日");
  16. }

日期类和日历类互换

  1. //Calendar转化为Data
  2. //返回标准化的Date
  3. public static Date calendarToData(int year, int month, int day) {
  4. Calendar calendar = Calendar.getInstance();//日历类的实例化
  5. calendar.set(year, month - 1, day);//设置日历时间,月份必须减一
  6. Date date = calendar.getTime(); // 从一个 Calendar 对象中获取 Date 对象
  7. return date;
  8. }
  9. System.out.println(calendarToData(2017,3,16));//打印测试
  10.  
  11. //Data转化为Calendar
  12. //返回的的是日历类里面有关时间的全部信息。
  13. public static Calendar dataToCalendar(Date date) {
  14. Calendar calendar = Calendar.getInstance();
  15. calendar.setTime(date);
  16. return calendar;
  17. }
  18.  
  19. Date date = new Date();//直接new对象,获取的是当前时间
  20. System.out.println(dataToCalendar(date));//打印测试

得到任意时间段得到时间集合List

  1. public static List getDateList(String time1, String time2) {
  2. ArrayList<String> list = new ArrayList<>();
  3. Date date1 =null;
  4. Date date2 =null;
  5. SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
  6. try {
  7. date1= dateFormat2.parse(time1);
  8. date2= dateFormat2.parse(time2);
  9. } catch (ParseException e) {
  10. e.printStackTrace();
  11. }
  12. Calendar calendar = Calendar.getInstance();//日历类的实例化
  13. while(date1.before(date2)){
  14. calendar.setTime(date1);
  15. String s = dateFormat2.format(date1);
  16. calendar.add(Calendar.DAY_OF_MONTH,1);
  17. date1=calendar.getTime();
  18. list.add(s);
  19. }
  20. return list;
  21. }

java日期相关的更多相关文章

  1. Java日期相关操作

    1.获得日期 在旧版本 JDK 的时代,有不少代码中日期取值利用了 java.util.Date 类,但是由于 Date 类不便于实现国际化,其实从 JDK1.1 开始,就更推荐使用 java.uti ...

  2. Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类

    Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯.2.面向对象的出现,将复杂的事情简单化.3.面向对象的出现,将之前过程中 ...

  3. Java工具类——日期相关的类

    前言 在日常的开发工作当中,我们经常需要用到日期相关的类(包括日期类已经处理日期的类),所以,我就专门整理了一篇关于日期相关的类,希望可以帮助到大家. 正文 一.日期类介绍 在 Java 里面,操作日 ...

  4. ☕【Java深层系列】「技术盲区」让我们一起完全吃透针对于时间和日期相关的API指南

    技术简介 java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的位置比如joda.文章主要对java日期处理的详解,用1.8可以不用joda. 时间概念 首先我们对一些基本的概念 ...

  5. Java日期处理类的相关使用

    java常用类-java日期处理类 Date类 Date类是jdk给我们提高的标准日期类,在java.util包下: 示例代码: import java.util.Date; public class ...

  6. Android随笔之——Android时间、日期相关类和方法

    今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...

  7. [转]Java日期时间使用总结

    原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...

  8. java日期处理总结

    Java日期时间使用总结   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式 ...

  9. Java日期时间使用总结

    一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题.   在J ...

随机推荐

  1. mac安装VMware虚拟机(含序列号)及Ubuntu系统

    首先去官网下载虚拟机,这里下载vmware fusion 10的版本: https://www.vmware.com/products/fusion/fusion-evaluation.html 下载 ...

  2. Install Kernel 3.10 on CentOS 6.5

    http://bicofino.io/2014/10/25/install-kernel-3-dot-10-on-centos-6-dot-5/ https://gree2.github.io/lin ...

  3. Install Jetty web server on CentOS 7 / RHEL 7

    http://www.eclipse.org/jetty/download.html http://www.eclipse.org/jetty/documentation/current/startu ...

  4. activiti engine.schema.update DB_SCHEMA_UPDATE_FALSE

    engine.properties # engine propertiesengine.schema.update=trueengine.activate.jobexecutor=falseengin ...

  5. [Wiki].NET框架

    .NET框架 建议将.NET Framework 3.0并入本条目或章节.(讨论)  .NET框架 .NET框架的组件堆栈 开发者 Microsoft 初始版本 2002年2月13日,​16年前 稳定 ...

  6. 如何禁止复制电脑文件到U盘、禁止U盘拷贝文件

    在公司局域网中,有时候我们处于保护电脑文件安全和商业机密的需要,会禁止局域网电脑使用U盘.禁用USB存储设备:或者禁止通过U盘复制电脑文件.禁止U盘拷贝公司电脑文件.那么,怎样实现呢?本文提供两种方法 ...

  7. 如何判断一条记录什么字段被修改了 [问题点数:40分,结帖人bluesukeke]

    查询出来数据,在数据集编辑状态下,如何判断一条记录被修改了,哪些字段被修改了. 可用adoquery的Delta屬性...eg: ClientDataSet1.Delta... PS:POST前是準確 ...

  8. js對象構造

    創建對象的3種方式: 1. var a=new Object() a.attributes=“1”: 2. var a={attributes:"1",aa:"2&quo ...

  9. js 实现List

    js 实现List 列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素可以是任意数据类型. 我们可以根据数组的特性来实现List. List 抽象数据类型定义 ...

  10. 科普一下bl锁的知识,没解锁的必看!

    今天给大家科普一下. 科普分为两版,一个详细版一个简单版.简单版往下翻. bl是什么?其实详细的我也不知道,我就知道原理和他的全称是bootloader.我们所说的解锁里面的“锁”,就是blbl锁的功 ...