文档章节

Calendar 日期类的使用

Andy市民
 Andy市民
发布于 2015/01/20 11:46
字数 1821
阅读 45
收藏 0
点赞 0
评论 0
Calendar的帮助类 :CalendarUtil.java
/**
 * @包名 :sys.schedual.util<br>
 * @文件名 :SchedualUtil.java<br>
 * @类描述 :排班帮助类<br>
 * @作者 :Andy.wang<br>
 * @创建时间 :2015-1-18下午07:20:31<br>
 * @更改人 :<br>
 * @更改时间 :<br>
 */
package sys.schedual.util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author :Andy.wang
 */
public class CalendarUtil {
	public static final String DateFormat = "yyyy-MM-dd";// 日期格式

	/**
	 * 
	 * 方法名 :getCalendar<br>
	 * 方法描述 :返回固定条件设置的Calendar对象。<br>
	 * Calendar对象设置项:设置每周的第一天为周一;设置每周从周一开始;设置每周至少7天<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午10:51:49 <br>
	 * 
	 * @return 返回类型 :Calendar
	 */
	public static Calendar getCalendar() {
		Calendar cal = Calendar.getInstance();
		cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置每周的第一天为周一
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置每周从周一开始
		cal.setMinimalDaysInFirstWeek(7);// 设置每周至少7天
		return cal;
	}

	/**
	 * 
	 * 方法名 :getWeekDays<br>
	 * 方法描述 :输入年、周,计算本周7天的日期<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-18下午07:21:25 <br>
	 * 
	 * @param year
	 *            :年份
	 * @param yearWeek
	 *            :周数
	 * @return 返回类型 :String[]
	 */
	public static String[] getWeekDays(int year, int yearWeek) {
		String[] str = new String[7];
		Calendar cal = getCalendar();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.WEEK_OF_YEAR, yearWeek);
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		cal.add(Calendar.DATE, cal.getActualMinimum(Calendar.DAY_OF_WEEK)
				- dayOfWeek);
		for (int i = 0; i < str.length; i++) {
			cal.add(Calendar.DATE, 1);
			Date d = cal.getTime();
			SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
			str[i] = sdf.format(d);
		}
		return str;
	}

	/**
	 * 
	 * 方法名 :getYearWeekFirstDay<br>
	 * 方法描述 :输入年、周,计算本周第一天的日期<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午09:58:57 <br>
	 * 
	 * @param year
	 *            :年份
	 * @param yearWeek
	 *            :周数
	 * @return 返回类型 :String
	 */
	public static String getYearWeekFirstDay(int year, int yearWeek) {
		Calendar calendar = getCalendar();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.WEEK_OF_YEAR, yearWeek);
		return getFormatDate(calendar.getTime());
	}

	/**
	 * 
	 * 方法名 :getYearWeekEndDay<br>
	 * 方法描述 :输入年、周,计算本周最后一天的日期<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午10:56:41 <br>
	 * 
	 * @param year
	 *            :年份
	 * @param yearWeek
	 *            :周数
	 * @return 返回类型 :String
	 */
	public static String getYearWeekEndDay(int year, int yearWeek) {
		Calendar calendar = Calendar.getInstance();
		// 下面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
		calendar.setFirstDayOfWeek(Calendar.MONDAY);// 设置每周的第一天为周一
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置每周从周一开始
		calendar.setMinimalDaysInFirstWeek(7);// 设置每周至少7天
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.WEEK_OF_YEAR, yearWeek);
		return getFormatDate(calendar.getTime());
	}

	/**
	 * 
	 * 方法名 :getWeekNumByYear<br>
	 * 方法描述 :输入年份,获取一年有多少个周<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午10:57:08 <br>
	 * 
	 * @param year
	 * @return 返回类型 :int
	 */
	public static int getWeekNumByYear(final int year) {
		int result = 52;// 每年至少有52个周 ,最多有53个周。
		String date = getYearWeekFirstDay(year, 53);
		if (date.substring(0, 4).equals(year + "")) {
			// 判断年度是否相符,如果相符说明有53个周。
			result = 53;
		}
		return result;

	}

	/**
	 * 
	 * 方法名 :getWeeksByYear<br>
	 * 方法描述 :输入年份,计算该年份每周的开始日期到结束日期<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午10:58:04 <br>
	 * 
	 * @param year
	 * @return 返回类型 :List<String[]>
	 */
	public static List<String[]> getWeeksByYear(final int year) {
		int weeks = getWeekNumByYear(year);
		List<String[]> result = new ArrayList<String[]>(weeks);
		for (int i = 1; i <= weeks; i++) {
			String[] tempWeek = new String[2];
			tempWeek[0] = getYearWeekFirstDay(year, i);
			tempWeek[1] = getYearWeekEndDay(year, i);
			result.add(tempWeek);
		}
		return result;
	}

	/**
	 * 
	 * 方法名 :getDaysOfMonth<br>
	 * 方法描述 :输入年份,月数,获取有多少天<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午11:16:56 <br>
	 * 
	 * @param year
	 * @param month
	 * @return 返回类型 :int
	 */
	public static int getDaysOfMonth(int year, int month) {
		Calendar calendar = getCalendar();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month);// 月份从0开始
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 
	 * 方法名 :getWeeksOfMonth<br>
	 * 方法描述 :输入年份,月数,获取有多少周<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午11:21:22 <br>
	 * 
	 * @param year
	 *            :年份
	 * @param month
	 *            :月份
	 * @return 返回类型 :int
	 */
	public static int getWeeksOfMonth(int year, int month) {
		Calendar calendar = getCalendar();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month);// 月份从0开始
		return calendar.getActualMaximum(Calendar.WEEK_OF_MONTH);
	}

	/**
	 * 
	 * 方法名 :getFormatDate<br>
	 * 方法描述 :格式化转换日期类型<br>
	 * 创建者 :Andy.wang<br>
	 * 创建时间 :2015-1-20上午09:51:42 <br>
	 * 
	 * @param date
	 * @return 返回类型 :String
	 */
	public static String getFormatDate(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(DateFormat);
		return dateFormat.format(date);
	}
}



测试类:CalendarUtilTest.java

/**
 * @包名 :sys.schedual.unittest<br>
 * @文件名 :CalendarUtilTest.java<br>
 * @类描述 :<br>
 * @作者 :Andy.wang<br>
 * @创建时间 :2015-1-20上午10:49:47<br>
 * @更改人 :<br>
 * @更改时间 :<br>
 */
package sys.schedual.unittest;

import java.util.List;

import org.junit.Test;

import sys.schedual.util.CalendarUtil;

/**
 * @author :Andy.wang
 */
public class CalendarUtilTest {
	@Test
	public void test() {
		int year = 2015, yearWeek = 1, month = 1;
		String yearWeekFirstDay = CalendarUtil.getYearWeekFirstDay(year,
				yearWeek);
		System.out.println(year + "年第" + yearWeek + "周的第一天日期是:"
				+ yearWeekFirstDay);
		System.out.println("..............................");

		String yearWeekEndDay = CalendarUtil.getYearWeekEndDay(year, yearWeek);
		System.out.println(year + "年第" + yearWeek + "周的最后一天日期是:"
				+ yearWeekEndDay);
		System.out.println("..............................");

		int weekNumByYear = CalendarUtil.getWeekNumByYear(year);
		System.out.println(year + "年共有" + weekNumByYear + "周");
		System.out.println("..............................");

		int days = CalendarUtil.getDaysOfMonth(year, month);
		System.out.println(year + "年" + month + "月,共" + days + "天");
		System.out.println("..............................");
		
		int weeks = CalendarUtil.getWeeksOfMonth(year, month);
		System.out.println(year + "年" + month + "月,共" + weeks + "周");
		System.out.println("..............................");
		
		List<String[]> list = CalendarUtil.getWeeksByYear(year);
		for (int i = 1; i <= list.size(); i++) {
			System.out.println("第" + i + "周:" + list.get(i - 1)[0] + " ~ "
					+ list.get(i - 1)[1]);
		}
		System.out.println("..............................");

		String[] str = CalendarUtil.getWeekDays(year, yearWeek);
		System.out.println(year + "年第" + yearWeek + "周日期是");
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
	}
}
测试结果:

2015年第1周的第一天日期是:2015-01-05
..............................
2015年第1周的最后一天日期是:2015-01-11
..............................
2015年共有52周
..............................
2015年1月,共28天
..............................
2015年1月,共4周
..............................
第1周:2015-01-05 ~ 2015-01-11
第2周:2015-01-12 ~ 2015-01-18
第3周:2015-01-19 ~ 2015-01-25
第4周:2015-01-26 ~ 2015-02-01
第5周:2015-02-02 ~ 2015-02-08
第6周:2015-02-09 ~ 2015-02-15
第7周:2015-02-16 ~ 2015-02-22
第8周:2015-02-23 ~ 2015-03-01
第9周:2015-03-02 ~ 2015-03-08
第10周:2015-03-09 ~ 2015-03-15
第11周:2015-03-16 ~ 2015-03-22
第12周:2015-03-23 ~ 2015-03-29
第13周:2015-03-30 ~ 2015-04-05
第14周:2015-04-06 ~ 2015-04-12
第15周:2015-04-13 ~ 2015-04-19
第16周:2015-04-20 ~ 2015-04-26
第17周:2015-04-27 ~ 2015-05-03
第18周:2015-05-04 ~ 2015-05-10
第19周:2015-05-11 ~ 2015-05-17
第20周:2015-05-18 ~ 2015-05-24
第21周:2015-05-25 ~ 2015-05-31
第22周:2015-06-01 ~ 2015-06-07
第23周:2015-06-08 ~ 2015-06-14
第24周:2015-06-15 ~ 2015-06-21
第25周:2015-06-22 ~ 2015-06-28
第26周:2015-06-29 ~ 2015-07-05
第27周:2015-07-06 ~ 2015-07-12
第28周:2015-07-13 ~ 2015-07-19
第29周:2015-07-20 ~ 2015-07-26
第30周:2015-07-27 ~ 2015-08-02
第31周:2015-08-03 ~ 2015-08-09
第32周:2015-08-10 ~ 2015-08-16
第33周:2015-08-17 ~ 2015-08-23
第34周:2015-08-24 ~ 2015-08-30
第35周:2015-08-31 ~ 2015-09-06
第36周:2015-09-07 ~ 2015-09-13
第37周:2015-09-14 ~ 2015-09-20
第38周:2015-09-21 ~ 2015-09-27
第39周:2015-09-28 ~ 2015-10-04
第40周:2015-10-05 ~ 2015-10-11
第41周:2015-10-12 ~ 2015-10-18
第42周:2015-10-19 ~ 2015-10-25
第43周:2015-10-26 ~ 2015-11-01
第44周:2015-11-02 ~ 2015-11-08
第45周:2015-11-09 ~ 2015-11-15
第46周:2015-11-16 ~ 2015-11-22
第47周:2015-11-23 ~ 2015-11-29
第48周:2015-11-30 ~ 2015-12-06
第49周:2015-12-07 ~ 2015-12-13
第50周:2015-12-14 ~ 2015-12-20
第51周:2015-12-21 ~ 2015-12-27
第52周:2015-12-28 ~ 2016-01-03
..............................
2015年第1周日期是
01/05
01/06
01/07
01/08
01/09
01/10
01/11

© 著作权归作者所有

共有 人打赏支持
Andy市民
粉丝 7
博文 36
码字总数 32858
作品 0
房山
程序员
【计算机本科补全计划】Java学习笔记(九) Java日期时间

正文之前 终于好像仿佛看完了菜鸟教程的Java课程,感觉自己收获颇丰!很好,Java看完之后正愁如何开始进阶呢!结果发现菜鸟还准备了Java实例这种好东西!简直就是教程界的良心啊 !!!没事,...

HustWolf ⋅ 2017/12/05 ⋅ 0

Java 中日期的几种常见操作 —— 取值、转换、加减、比较

java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我...

十一11 ⋅ 2016/02/20 ⋅ 0

Java中的时间日期处理

程序就是输入——>处理——>输出。对数据的处理是程序员需要着重注意的地方,快速、高效的对数据进行处理时我们的追求。其中,时间日期的处理又尤为重要和平凡,此次,我将把Java中的时间日期...

ok绷forever ⋅ 2016/07/20 ⋅ 0

Java日期处理

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

cwsone ⋅ 2012/05/31 ⋅ 0

【你不知道的事系列】Java中处理日期的类

Java中提供了一系列用于处理日期、时间的类,包括创建日期,时间对象,获取系统当前日期,时间等操作 Date类: 位于java.util.Date,从JDK1.0起就存在了,但现在它的大部分构造器,方法已过时...

LSantorini ⋅ 2015/08/10 ⋅ 2

20个高级Java面试题汇总

这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。 程序员面试指南:https://www.youtube.com/watch?v=0...

天蚕宝衣 ⋅ 2016/03/31 ⋅ 0

Java日期类型的转换处理

1.java中处理时间日期的类主要有Date和Calendar两种.由于项目中涉及了从数据库中得到的Timestamp邮戳类型的处理.Date现在不提倡用来处理日期.Calendar是对Date的继承和扩充.Calendar是抽象的...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Java Date 和 Calendar

Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算未来的日期,定...

长平狐 ⋅ 2013/01/06 ⋅ 0

JAVA Calendar详解

(在文章的最后,将会介绍Date类,如果有兴趣,可以直接翻到最后去阅读) 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的...

小代码2016 ⋅ 2016/03/16 ⋅ 0

Java 8新特性探究(七)深入解析日期和时间-JSR310

博客一个月没更新了,这次给大家讲下java8时间与日期API。 众所周知,日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题。应用程序需要知道当前的时间点和下一个时间点...

成熟的毛毛虫 ⋅ 2014/01/17 ⋅ 20

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CENTOS7防火墙命令记录

安装Firewall命令: yum install firewalld firewalld-config Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-po......

cavion ⋅ 今天 ⋅ 0

【C++】【STL】利用chromo来测量程序运行时间与日志时间打印精确到微秒

直接上代码吧,没啥好说的。头疼。 #include <iostream>#include <string>#include <ctime>#include <sstream>#include <iomanip>#include <thread>#include <chrono>using ......

muqiusangyang ⋅ 今天 ⋅ 0

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简...

故久呵呵 ⋅ 今天 ⋅ 0

破解公司回应苹果“USB限制模式”:已攻破

本周四,苹果发表声明称 iOS 中加入了一项名为“USB 限制模式”的功能,可以防止 iPhone 在连接其他设备的时候被破解,并且强调这一功能并不是针对 FBI 等执法部门,为的是保护用户数据安全。...

六库科技 ⋅ 今天 ⋅ 0

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要 问题描述 我想用枚举类来表示用户当前状态,枚举类由 code 和 msg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候...

Wenyi_Feng ⋅ 今天 ⋅ 0

synchronized与Lock的区别

# <center>王梦龙的读书笔记第一篇</center> ## <center>-synchronized与Lock的区别</centre> ###一、从使用场景来说 + synchronized 是能够注释代码块、类、方法但是它的加锁是和解锁使用一......

我不想加班 ⋅ 今天 ⋅ 0

VConsole的使用

手机端控制台打印输出,方便bug的排查。 首先需要引入vconsole.min.js 文件,然后在文件中创造实例。就能直接使用了。 var vConsole = new VConsole(); vConsole的文件地址...

大美琴 ⋅ 今天 ⋅ 0

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 今天 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 今天 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部