/**

* 当天凌晨

*/

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. CentOS7 LVM磁盘扩容

    1:创建磁盘分区(注意红色命令部分) [root@hongyin-test- ~]# fdisk /dev/sda Welcome to fdisk (util-linux ). Changes wi ...

  2. 《OD学spark》20160924scala基础

    拓展: Hadoop 3.0 NameNode HA NameNode是Active NameNode是Standby可以有多个 HBase Cluster 单节点故障? HBaster -> ...

  3. 洛谷P3792 由乃与大母神原型和偶像崇拜

    P3792 由乃与大母神原型和偶像崇拜 题目背景 由乃最近没事干,去研究轻拍学去了 就是一个叫做flip flappers,轻拍翻转小膜女的番 然后研究的过程中她看到了一个叫做大母神原型的东西 大母神 ...

  4. Unity---遇到的一些坑和解决方案

    目录 1.在UGUI中的物体顺时针旋转Z是负的.(和正常3D中是相反的) 2.MoveTowards()+Vector3.Distance()控制物体的移动 3.trtransform.SetPare ...

  5. 视图、存储函数、存储过程、触发器:MySQL系列之五

    一.视图 视图:VIEW,虚表,保存有实表的查询结果,实际数据不保存在磁盘 物化视图:实际数据在磁盘中有保存,加快访问,MySQL不支持物化视图 基表:视图依赖的表 视图中的数据事实上存储于" ...

  6. [USACO09OCT]热浪Heat Wave Dijkstra

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  7. xcode定期清理记录一下

    此文章仅适用于适用于使用Xcode的开发者. 长期不清理Xcode中的一些文件你会发现自己的mac硬盘越来越小,而且是这个其他占了绝大部分的硬盘,在网上搜索了很多办法都没找到如何清理这些其他 后来来来 ...

  8. JMeter - 实时结果 - InfluxDB和Grafana - 第1部分 - 基本设置

    概述: 在本文中,我将解释如何使用JMeter + InfluxDB + Grafana获得实时性能测试结果. 请注意,此主题太大,无法涵盖一篇文章中的所有内容.所以,我试图提供与TestAutoma ...

  9. 由奇葩cookie导致服务器500来认识cookie

    问题:cookie中文会导致服务器报500错误. 一:cookie的特点 1.以键值对的形式出现的,比如:a=b;b=c 2.中文的值需要转义 cookie的例子 <!DOCTYPE html& ...

  10. 修改Gradle本地仓库

    问题描述 Gradle 默认的本地仓库为 C:\Users\用户名\.gradle,不想让其一直下载东西占用 C 盘资源. 解决方法 新建环境变量名:GRADLE_USER_HOME,变量值为:D:\ ...