/**

* 当天凌晨

*/

public static Calendar startOfDay(Calendar c) {
if (c == null) {
return c;
}
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c;
}

/**

* 当天晚上
* @param 
* @return
*/

public static Calendar endOfDay(Calendar c) {
if (c == null) {
return c;
}
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 998);
return c;
}

public static Calendar startOfYear(Integer year) {
if (year == null)
return null;
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DAY_OF_MONTH, 1);
return startOfDay(c);
}

public static Calendar endOfYear(Integer year) {
if (year == null)
return null;
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.DECEMBER);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
return endOfDay(c);
}

/**
* 将给定字符串转换为日期,如果没有设置解析器,则用默认格式(yyyy-MM-dd HH:mm:ss)解析
*
* @param s
* 给定字符串
* @param format
* 解析格式
* @return 日期对象
* @throws ParseException
*/
public static Calendar string2Calendar(String s, DateFormat format) throws ParseException {
if (!StringTools.hasText(s))
return null;
Calendar c = Calendar.getInstance();
Date date = (format == null ? DEFAULT_FORMAT : format).parse(s);
c.setTimeInMillis(date.getTime());
return c;
}

/**
* 将给定字符串转换为日期,如果没有设置解析字符串,则用默认格式(yyyy-MM-dd HH:mm:ss)解析
*
* @param s
* 给定字符串
* @param format
* 解析字符串
* @return 日期对象
* @throws ParseException
*/
public static Calendar string2Calendar(String s, String format) throws ParseException {
return string2Calendar(s, new SimpleDateFormat(StringTools.hasText(format) ? format : DEFAULT_PATTERN));
}

/**
* 将给定字符串按照缺省解析格式(yyyy-MM-dd HH:mm:ss)转换为日期
*
* @param s
* @return
* @throws ParseException
*/
public static Calendar string2Calendar(String s) throws ParseException {
return string2Calendar(s, DEFAULT_PATTERN);
}

/**
* 将给定的日期格式化输出,如果没有设置输出格式,则采用模式格式(yyyy-MM-dd HH:mm:ss)输出
*
* @param c
* 日期
* @param format
* 解析格式
* @return
*/
public static String calendar2String(Calendar c, DateFormat format) {
if (c == null)
return null;
return (format == null ? DEFAULT_FORMAT : format).format(c.getTime());
}

/**
* 将给定的日期格式化输出,如果没有设置输出格式,则采用模式格式(yyyy-MM-dd HH:mm:ss)输出
*
* @param c
* 日期
* @param format
* 解析格式
* @return
*/
public static String calendar2String(Calendar c, String format) {
return calendar2String(c, (StringTools.hasText(format) ? new SimpleDateFormat(format) : DEFAULT_FORMAT));
}

/**
* 将给定的日期格式化输出,采用缺省格式(yyyy-MM-dd HH:mm:ss)
*
* @param c
* 日期
* @return
*/
public static String calendar2String(Calendar c) {
return calendar2String(c, DEFAULT_FORMAT);
}

/**
* 得到一个月的第一日和最后一日
*
* @param monthStr
* @return [0] 月的第一天,[1]月的最后一天
* @throws ParseException
*/
public static Calendar[] getMonthStartAndEnd(String monthStr) throws ParseException {
Calendar[] mse = new Calendar[2];
mse[0] = string2Calendar(monthStr, MONTH_PATTERN);
if (null == mse[0]) {
mse[0] = Calendar.getInstance();
mse[0].set(Calendar.DATE, 1);
}
mse[1] = (Calendar) mse[0].clone();
mse[1].set(Calendar.MONTH, mse[1].get(Calendar.MONTH) + 1);
mse[1].set(Calendar.DATE, mse[1].get(Calendar.DATE) - 1);
mse[1].set(Calendar.HOUR_OF_DAY, 23);
mse[1].set(Calendar.MINUTE, 59);
mse[1].set(Calendar.SECOND, 59);
mse[1].set(Calendar.MILLISECOND, 998);
return mse;
}

/**
* 获取前一个月第一天
*
* @param c
* @return
*/
public static Calendar startOfLastMonth(Calendar c) {
c.add(Calendar.MONTH, -1);
c.set(Calendar.DAY_OF_MONTH, 1);
return startOfDay(c);
}

/**
* 获取前一个月最后一天
*
* @param c
* @return
*/
public static Calendar endOfLastMonth(Calendar c) {
c.set(Calendar.DAY_OF_MONTH, 0);
return endOfDay(c);
}

/**
* 上周开始(周日为一周开始)
*
* @param c
* @return
*/
public static Calendar startOfLastWeek(Calendar c) {
c.add(Calendar.WEEK_OF_YEAR, -1);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return startOfDay(c);
}

/**
* 上周结束(以周六为结束)
*
* @param c
* @return
*/
public static Calendar endOfLastWeek(Calendar c) {
c.add(Calendar.WEEK_OF_YEAR, -1);
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
return endOfDay(c);
}

/**
* 本周开始(周日为一周开始)
*
* @param c
* @return
*/
public static Calendar startOfWeek(Calendar c) {
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return startOfDay(c);
}

/**
* 本周结束
* 周六为一周结束
*
* @param c
* @return
*/
public static Calendar endOfWeek(Calendar c) {
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
return endOfDay(c);
}

/**
* 取得当月天数
* */
public static int getCurrentMonthLastDay() {
Calendar a = Calendar.getInstance();
a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
int maxDate = a.get(Calendar.DATE);
return maxDate;
}

/**
* 月初第一天
* */

public static Calendar startOfMonth(Calendar cal) {
cal.set(Calendar.DAY_OF_MONTH, 1);
return startOfDay(cal);
}

/**
* 月末最后一天
* @param c
* @return
*/
public static Calendar endOfMonth(Calendar c) {
c.set(Calendar.DATE, c.getActualMaximum(Calendar.DAY_OF_MONTH));
return endOfDay(c);
}

// 获取当前时间所在年的周数
public static int getWeekOfYear(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}

/**********************************************************************分割线*******************************************************/

通常财务部会已一年中的某一天为开始到第二年的当天作为财年

以9月26日为例

/**
* 获取偏差值
* 获取9月26日到年末的时间毫秒数
* @return
*/
public static long getDeviationTimeInMillis() {
Calendar nowCalendar = Calendar.getInstance();
nowCalendar.set(Calendar.MONTH, 8);
nowCalendar.set(Calendar.DAY_OF_MONTH, 26);
Calendar startTime = startOfDay(nowCalendar);

Calendar instance = Calendar.getInstance();
Calendar year = startOfYear((instance.get(Calendar.YEAR) + 1));

long time = year.getTimeInMillis() - startTime.getTimeInMillis();

return time;
}

/**
* 获取相对时间
* 获取9月26日到年末的时间毫秒数

* 获取当前时间的毫秒数 + 偏差毫秒数
* @return
*/

public static Calendar getDeviationTime(Calendar c) {
long timeInMillis = c.getTimeInMillis();
long deviationMills = timeInMillis + getDeviationTimeInMillis();
Calendar time = Calendar.getInstance();
time.setTimeInMillis(deviationMills);
// System.err.println("yyyyyyy++"+calendar2String(time));
// System.err.println("dayofyear3++"+(time.get(Calendar.DAY_OF_YEAR)));
return time;
}

/**
* 获取相对周数

* @return
*/

public static Integer getWeekOfYear(Calendar nowTime) throws ParseException {
// = Calendar.getInstance();
// nowTime.add(Calendar.MONTH, 8);
// System.err.println("--NOWTIME--"+
// TimeTools.calendar2String(nowTime));
int nowMonth = nowTime.get(Calendar.MONTH) + 1;
int year = nowTime.get(Calendar.YEAR);
int week = 0;
if (nowMonth > 9) {
String standardTimeStr = year + "-09-26 00:00:00";
Calendar standardTime = TimeTools.string2Calendar(standardTimeStr);
if (standardTime == null) {
System.err.println("-----------错误错误错误错误-------------");
return null;
}
int nowWeekOfYear = nowTime.get(Calendar.WEEK_OF_YEAR);
int standardWeekOfYear = standardTime.get(Calendar.WEEK_OF_YEAR);
week = nowWeekOfYear - standardWeekOfYear;
// System.out.println("nowWeekOfYear++"+nowWeekOfYear+"===standardWeekOfYear++"+standardWeekOfYear+"===++"+week);
} else {
// 去年9月26号后的一周为第一周
// 去年9月26之后的周数 + 当前周数。
String standardTimeStr = (year - 1) + "-09-26 00:00:00";
Calendar standardTime = TimeTools.string2Calendar(standardTimeStr);
if (standardTime == null) {
System.err.println("-----------错误错误错误错误-------------");
return null;
}
// 去年9月26号之后的周
int standardWeekOfYear = standardTime.get(Calendar.WEEK_OF_YEAR) + 1;
// 获取去年总周数
// System.err.println((year-1)+"--------------++"+sumWeek(year-1));
int sumWeek = sumWeek(year - 1);
// 计算去年剩余周数
int otherWeek = sumWeek - standardWeekOfYear;
// 获取当前周数
int nowWeek = nowTime.get(Calendar.WEEK_OF_YEAR);
week = nowWeek + otherWeek;
}

return week;
}

//给定年月,又去相对的开始年

public static Calendar startOfDeviationYear(int year, int month) {
Calendar nowCalendar = Calendar.getInstance();
if (month >= 8) {
nowCalendar.set(Calendar.YEAR, year);
} else {
nowCalendar.set(Calendar.YEAR, year - 1);
}
nowCalendar.set(Calendar.MONTH, 8);
nowCalendar.set(Calendar.DAY_OF_MONTH, 26);
return startOfDay(nowCalendar);
}

//给定年月,又去相对的结束年

public static Calendar endOfDeviationYear(int year, int month) {

Calendar nowCalendar = Calendar.getInstance();
if (month >= 8)
nowCalendar.set(Calendar.YEAR, year + 1);
else
nowCalendar.set(Calendar.YEAR, year);

nowCalendar.set(Calendar.MONTH, 8);
nowCalendar.set(Calendar.DAY_OF_MONTH, 25);
return endOfDay(nowCalendar);
}

//给定时间 对应的相对月初

public static Calendar startOfDeviationMonth(Calendar c) {
if (c.get(Calendar.DAY_OF_MONTH) < 26)
c.add(Calendar.MONTH, -1);
c.set(Calendar.DAY_OF_MONTH, 26);
return startOfDay(c);
}

//给定时间 相对 月末

public static Calendar endOfDeviationMonth(Calendar c) {
int dayOfMonth = c.get(Calendar.DAY_OF_MONTH);
if (dayOfMonth > 26)
c.add(Calendar.MONTH, 1);
c.set(Calendar.DAY_OF_MONTH, 25);
return endOfDay(c);
}

//获得当前时间 对应 月份中的天数

public static int getDeviationMonthSumDay() {
Calendar instance = Calendar.getInstance();
Calendar c = getDeviationTime(instance);
return getCurrentMonthSumDay(c);
}

//获得给定时间 对应月份中的天数

private static int getCurrentMonthSumDay(Calendar c) {
c.set(Calendar.DATE, 1);// 把日期设置为当月第一天
c.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
return c.get(Calendar.DATE);
}

/**
* 本周开始
* 周一开始
* @param c
* @return
*/
public static Calendar startOfWeekWithMonday(Calendar c) {
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return startOfDay(c);
}

/**
* 本周结束
* 周日结束
* @param c
* @return
*/
public static Calendar endOfWeekWithSunday(Calendar c) {
c.add(Calendar.WEEK_OF_YEAR, 1);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return endOfDay(c);
}

/**
* 下周开始
* 周一开始
* @param c
* @return
*/

public static Calendar startOfNextWeekWithMonday(Calendar c) {
// c.add(Calendar.WEEK_OF_YEAR, 1);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return startOfDay(c);
}

/**
* 上周开始
* 周一开始
* @param c
* @return
*/
public static Calendar startOfLastWeekWithMonday(Calendar c) {
c.add(Calendar.WEEK_OF_YEAR, -1);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return startOfDay(c);
}

/**
* 上周结束
* 周日结束
* @param c
* @return
*/
public static Calendar endOfLastWeekWithSunday(Calendar c) {
// c.add(Calendar.WEEK_OF_YEAR, -1);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return endOfDay(c);
}

JAVA时间加工类的更多相关文章

  1. java时间类简单总结

    java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个):  日期格式为:年月日时分秒(不包含毫秒部分) ...

  2. inner join ,left join ,right join 以及java时间转换

    1.inner join ,left join 与 right join (from 百度知道) 例表aaid adate1    a12    a23    a3表bbid  bdate1     ...

  3. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Java时间转换类实现

    Java时间类型非常的差,首先版本问题,本人使用java在Android平台开发.很多Data类的方法已经不提倡使用,一个时间,居然要使用Calendar.DateFormat等类共同编码,非常麻烦. ...

  5. JAVA 时间差距,两个时间相差多少天,时,分,秒

    JAVA 时间差距,两个时间相差多少天,时,分,秒 package io; import java.text.DateFormat; import java.text.ParseException; ...

  6. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  7. Java时间日期格式转换 转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html

    Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @ ...

  8. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  9. JAVA时间进行比较和转换,时间加减得到天数

    转自:https://blog.csdn.net/iteye_8535/article/details/82246006 JAVA时间进行比较和转换,时间加减得到天数 1. 把时间类型的字符串转为DA ...

随机推荐

  1. 8.bwapp亲测xxe漏洞

    这几天在学习XXE漏洞,这里用靶机bwapp来练习一下这个漏洞,重在学习 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤, 从而可以造成命令执行,目录遍历 ...

  2. java笔记--关于线程同步(5种同步方式)

    转自:http://www.2cto.com/kf/201408/324061.html 为何要使用同步?     java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改 ...

  3. Docker版本

    第一次接触到安装docker的时候,网上的 安装 有 lxc-docker, docker-engine, docker.io, docker-ce 这些包,肯定会有些迷糊.读完这篇文章你就清楚了. ...

  4. 自定义进度条PictureProgressBar——从开发到开源发布全过程

    自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...

  5. Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. linux下python3的安装(已安装python2的情况下)

    前段时间想自学一下python,就在虚拟机里已安装python2.7的情况下又安装了最新版python3.6.4.于是问题来了..只要一打开终端就出现一大段错误代码(忘记截图了),当时看到是ros和p ...

  7. 前端实现Tab切换栏

    tab切换,所需的 UI 只有两组元素 - Header 和 Tab,下面介绍几种不同的实现方法和他们的优缺点 本文主要说一些 CSS 的实现方法.最好的方法是 第四种 => label + i ...

  8. P2746 [USACO5.3]校园网Network of Schools

    传送门 把所有学校的关系构成一个图,显然一个强联通分量的所有学校只要有一个有新软件,其他学校也都会有 考虑缩点,发现入度为 0 的块一定要给,因为没有其他人给它 入度不为 0 的块一定有其他人给,我们 ...

  9. DozerBeanMapper 配置

    applicationContext.xml <bean id="mapper" class="org.dozer.spring.DozerBeanMapperFa ...

  10. 使用nsenter工具进入Docker容器

    查看本机装没有nsenter whereis nsenter或者whatis nsenter 未安装先安装,网上有很多这样的脚本 vi nsenter.sh #!/bin/bashcurl https ...