package zxc.utils;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import zxc.exceptions.LogicalException;
public class CalendarUtil {
protected static Log log = LogFactory.getLog(CalendarUtil.class);
/** 设置一个星期的第一天 */
public static final int FIRST_DAY_OF_WEEK = Calendar.SUNDAY;
/** 设置一年或一个月的第一个星期的最小天数 */
public static final int MINIMAL_DAYS_IN_FIRST_WEEK = 1;
/**
* 取得当前日期是多少周,星期日被定为一周的第一天,第一周允许的最小天数为1
*
* @param date
* @return
*/
public static int getWeekOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}
public static int getWeekOfyear(int year, int month, int date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, month, date);
return getWeekOfYear(c.getTime());
}
/**
* 总体上可以说是求一年的总周数,因为52*7=364,所以基本上此值应该为52,但是这里所要求的是一年中的最
* 后几天的WEEK_OF_YEAR的值,为什么不直接取12月31日的WEEK_OF_YEAR的值呢,这是因为根据
* setFirstDayOfWeek与setMinimalDaysInFirstWeek设置的值12月31日所WEEK_OF_YEAR字段所返回的值
* 很可能是下一年的第一个星期
*
* @param year
* @return
*/
public static int getMaxWeekNumOfYear(int year) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, Calendar.DECEMBER, 31);
return c.get(Calendar.WEEK_OF_YEAR) == 1 ? 52 : c.get(Calendar.WEEK_OF_YEAR);
}
/**
* 获取某年第一周的天数
*
* @param year
* @return
*/
public static int getDaysOfFirstWeek(int year) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, Calendar.JANUARY, 1);
return 8 - c.get(Calendar.DAY_OF_WEEK);
}
/**
* 取得当前日期所在周的第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
return c.getTime();
}
public static Date getFirstDayOfWeek(int year, int month, int date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, month, date);
return getFirstDayOfWeek(c.getTime());
}
/**
* 取得当前日期所在周的最后一天
*
* @param date
* @return
*/
public static Date getLastDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() == 1 ? 7 : (c.getFirstDayOfWeek() + 6) % 7);
return c.getTime();
}
public static Date getLastDayOfWeek(int year, int month, int date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, month, date);
return getLastDayOfWeek(c.getTime());
}
/**
* 获取两个日期间的周次差,这两个日期要么在同一年,要么是相邻的两个年份
*
* @param start
* @param end
* @return
*/
public static int getDeltaWeeks(Date start, Date end) {
Calendar cs = Calendar.getInstance();
Calendar ce = Calendar.getInstance();
cs.setTime(start);
ce.setTime(end);
int s = getWeekOfYear(start);
int e = getWeekOfYear(end);
return cs.get(Calendar.YEAR) == ce.get(Calendar.YEAR) ? e - s : e - s + getMaxWeekNumOfYear(cs.get(Calendar.YEAR));
}
public static int getDeltaWeeks2(Date start, Date end) {
Calendar cs = Calendar.getInstance();
Calendar ce = (Calendar) cs.clone();
Calendar ct = Calendar.getInstance();
ct.setTime(start);
cs.set(ct.get(Calendar.YEAR), ct.get(Calendar.MONTH), ct.get(Calendar.DATE));
ct.setTime(end);
ce.set(ct.get(Calendar.YEAR), ct.get(Calendar.MONTH), ct.get(Calendar.DATE));
cs.setTime(getFirstDayOfWeek(cs.getTime()));
ce.setTime(getFirstDayOfWeek(ce.getTime()));
return (int) ((ce.getTimeInMillis() - cs.getTimeInMillis()) / (7 * 24 * 60 * 60 * 1000) + 1);
}
/**
* 得到某年某周的第一天
*
* @param year
* @param week
* @return
*/
public static Date getFirstDayOfWeek(int year, int week) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, Calendar.JANUARY, 1);
c.add(Calendar.DATE, week * 7);
return getFirstDayOfWeek(c.getTime());
}
/**
* 得到某年某周的最后一天
*
* @param year
* @param week
* @return
*/
public static Date getLastDayOfWeek(int year, int week) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.set(year, Calendar.JANUARY, 1);
c.add(Calendar.DATE, week * 7);
return getLastDayOfWeek(c.getTime());
}
/**
* 获取当前日期所在月份的第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, 1);
return c.getTime();
}
/**
* 获取当前日期所在月份的最后一天
*
* @param date
* @return
*/
public static Date getLastDayOfMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, 1);//日期置1
c.add(Calendar.MONTH, 1);//月份向前添加一个月
c.add(Calendar.DAY_OF_MONTH, -1);//日期-1
return c.getTime();
}
/**
* 获取当前日期所在月份的最后一天
*
* @param date
* @return
*/
public static long getDaysOfTwoDate(Date start, Date end) {
Calendar c = Calendar.getInstance();
Calendar temp = Calendar.getInstance();
//取年月日
c.setTime(start);
temp.clear();
temp.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
start = temp.getTime();
System.out.println(start);
//取年月日
c.setTime(end);
temp.clear();
temp.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
end = temp.getTime();
System.out.println(end);
long time = (end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000);
return time + 1;
}
public static int getYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int year = c.get(Calendar.YEAR);
return year;
}
public static int getMothOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
return month+1;
}
public static int getHalfOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
return month <= 5 ? 1 : 2;
}
public static int getQuarterOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
switch (month) {
case 0:
case 1:
case 2:
return 1;
case 3:
case 4:
case 5:
return 2;
case 6:
case 7:
case 8:
return 3;
case 9:
case 10:
case 11:
return 4;
default:
throw new LogicalException("不可能存在其它的月份值");
}
}
public static int getQuarterOfYear2(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
return month / 3 + 1;
}
public static void main(String[] args) {
Date start = new Date();
Date end1 = new Date(start.getTime() + 60 * 60 * 1000);
Date end2 = new Date(start.getTime() + 7 * 60 * 60 * 1000);
Date end3 = new Date(start.getTime() + 8 * 60 * 60 * 1000);
Date end4 = new Date(start.getTime() + 20 * 60 * 60 * 1000);
Date end5 = new Date(start.getTime() + 24 * 60 * 60 * 1000);
System.out.println(getDaysOfTwoDate(start, end1));
System.out.println(getDaysOfTwoDate(start, end2));
System.out.println(getDaysOfTwoDate(start, end3));
System.out.println(getDaysOfTwoDate(start, end4));
System.out.println(getDaysOfTwoDate(start, end5));
}
}
分享到:
相关推荐
"UTILS_日期处理工具类_" 提供了一组用嵌入式语言实现的日期处理工具代码,帮助开发者更方便地进行时间相关的操作。下面我们将详细探讨这个工具类包含的主要知识点。 1. **日期和时间基础**: - 在编程中,日期和...
基本涵盖了各种场景的日期处理需要,包括时间类型转换,获取N天前后,月初月末,某段时间按天拆分等功能,欢迎使用。
js 日期处理工具类,实现了日期的转换,日期格式: 30分钟前,16:20,昨天 11:11、11-17 10:10,等格式。
本篇文章将深入探讨Swift中的日期处理工具类,以及如何在实际项目中有效利用它们。 首先,Swift的`Date`类代表一个时间点,通常是一个全球协调时间(UTC)。这个类是不可变的,意味着所有基于`Date`的操作都不会...
java 日期处理工具类
很实用的安卓开发工具类,开发必备,日期处理工具类,IO流转换工具类,打印日志工具类,屏幕,字符串工具类,Toast工具类,弹框工具类.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
日期操作工具类,主要实现了日期的常用操作。 * * 在工具类中经常使用到工具类的格式化描述,这个主要是一个日期的操作类,所以日志格式主要使用 SimpleDateFormat的定义格式. * * 格式的意义如下: 日期和...
2014" 专门用于处理springboard定时任务修改cron参数的日期处理方法 12.获取本月第一天(月初时间) 13.获取本月最后一天(月底时间) 以上这些方法都在该Java工具类,当然不仅仅包含这些,还有其他的很多。
获取日期中的某数值。如获取月份 增加日期中某类型的某数值。如增加日期 获取精确的日期 判断字符串是否为日期字符串 获取日期字符串的日期风格。失敗返回null。 将日期字符串转化为日期。失败返回null。 ...
日期操作工具类,String转Long,String转Date,Date转String,Date转Long,Long转Date,Long转String等
超好用的时间工具类,包括时间各种格式转换,时间字符串互相转,时间增加,时间减去,单独获取日,获取月,获取时间等
本篇文章将介绍一个名为"LunarCalendar"的Java工具类,它专门用于农历日期的处理。 首先,我们来看`LunarCalendar`这个类的基本结构。这个类通常会包含一系列的内部数据结构来表示农历的年、月、日,可能还包括时、...
包含"yyyy-MM-dd"、"yyyy-MM-dd HH:mm:ss"、"yyyyMMdd"、"yyyyMMddHHmmss"、"yyyy-MM"、"yyyyMM"等时间格式的转换。 其中: 1.String转Timestamp stringToTimestamp(String dateStr); 2.比较传入时间与当前时间前一...
Java日期处理工具类DateUtils详解 Java日期处理工具类DateUtils是Java中一个非常有用的工具类,它提供了一系列日期和时间处理相关的操作,涵盖了日期和时间的格式化、解析、计算等多方面的内容。本文将详细介绍...
2. **DateUtil**: 时间日期处理工具类,通常包含将日期格式化为字符串,字符串转换为日期,计算两个日期之间的差值等功能。在Android开发中,这类工具类能帮助开发者更好地管理和展示时间数据。 3. **BitmapUtil**:...