DateUtil
//有些地方需要修改 import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; public class DateUtil {
private final static String[] CN_Digits = { "〇", "一", "二", "三", "四", "五",
"六", "七", "八", "九", "十" };
public static final long daySpan = 24 * 60 * 60 * 1000;
/**yyyy-MM-dd HH:mm:ss*/
public static final String TIME_FORMAT_NORMAL = "yyyy-MM-dd HH:mm:ss";
/**yyyy-MM-dd*/
public static final String DATE_FORMAT_NORMAL = "yyyy-MM-dd";
/**yyyy.MM.dd*/
public static final String DATE_FORMAT_DOT = "yyyy.MM.dd";
/**yyyyMMdd*/
public static final String DATE_FORMAT_NO_MINUS = "yyyyMMdd";
/**yyMMdd*/
public static final String DATE_FORMAT_NO_MINUS_SHORT = "yyMMdd";
/**yyyy-MM*/
public static final String MONTH_FORMAT_NORMAL = "yyyy-MM";
/**MM-dd*/
public static final String MONTH_DAY_FORMAT = "MM-dd";
/**yyyyMMdd*/
public static final String DATE_FORMAT_SHORT = "yyyyMMdd";
/**yyyyMM*/
public static final String MONTH_FORMAT = "yyyyMM";
/**yyyy.MM*/
public static final String MONTH_FORMAT_DOT = "yyyy.MM";
/**yyyyMMddHHmm*/
public static final String DATE_FORMAT_MINUTE = "yyyyMMddHHmm";
/**yyyyMMddHHmmss*/
private static final String TIME_FORMAT_SHORT = "yyyyMMddHHmmss";
/**MM/dd/yyyy HH:mm:ss**/
public static final String MONTH_DAY_YEAR_HOUR_MINUTE ="MM/dd/yyyy HH:mm:ss"; /**
* 判断参数year、month、day能否组成一个合法的日期。
*
* @param month
* 月份,合法月份范围是 1-12
* @param day
* 日数
* @param year
* 年份,必须大于1900
* @return
*/
public static boolean isDate(int month, int day, int year) {
if (year < 1900) {
return false;
}
if (month < 1 || month > 12) {
return false;
}
if (day < 1 || day > 31) {
return false;
} // 判断年份是否为闰年
@SuppressWarnings("unused")
boolean leapYear = isLeapYear(year);
// 获得该年该月的最大日期
int maxD = getMaxDay(year, month);
if (day > maxD) {
return false;
} return true;
} /**
* 给定一个年份和月份,可以得到该月的最大日期。 例如 2009年1月,最大日期为31。
*
* @param year
* 年份,必须大于1900
* @param month
* 月份,合法月份范围是 1-12
* @return
*/
public static int getMaxDay(int year, int month) {
if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
return 30;
}
if (month == 2) {
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
}
return 31;
} /**
* 判断年份是否为闰年。
*
* @param year
* 年份,必须大于1900
* @return
*/
public static boolean isLeapYear(int year) {
boolean leapYear = ((year % 400) == 0);
if (!leapYear) {
leapYear = ((year % 4) == 0) && ((year % 100) != 0);
}
return leapYear;
} public static String getCurrentStringTime(){
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
String formatDate=format.format(date);
return formatDate;
} public static String getCurrentTimeSecond(){
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatDate=format.format(date);
return formatDate;
}
/**
* yyyy-MM-dd HH:mm:ss格式串转换为日期
* @param yyyy-MM-dd HH:mm:ss 格式日期
* @return Date日期
*/
public static Date paseDate(String formatDate){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=null;
try {
date = format.parse(formatDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String getCurrentTimeMilliSecond(){
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String formatDate=format.format(date);
return formatDate;
} public static String getCurrentMonth(){
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM");
String formatDate=format.format(date);
return formatDate;
}
/**
* 获取当前日期(格式为20110802)
* @return
*/
public static String getCurrentDay(){
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd");
String formatDate=format.format(date);
return formatDate;
}
/**
* 获取当前时间
* @param format 时间格式,例如:yyyy-MM-dd
* @param count 增加或减少的天数
* @return
*/
public static String getCurrentDate(String format,Integer count) {
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, count);//增加或减少的天数
String currentDate = df.format(cal.getTime());
return currentDate;
} /**
* 增加月份后的日期数
* @param countMoney
* @return
*/
public static String getDateAddMoney(String dateStr, int m) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = df.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, m);
return df.format(calendar.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return null;
} /**
* 获取下个月的第一天
* @param time
* @param format
* @return
*/
public static String getNextMonthFirstDay(String format) {
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);// 当前月+1,即下个月
cal.set(Calendar.DATE, 1);// 将下个月1号作为日期初始值
String currentMonth = df.format(cal.getTime());
return currentMonth;
} /**
* 获取下个月的最后一天
* @param time
* @param format
* @return
*/
public static String getNextMonthLastDay(String format) {
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(format);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);// 将下2个月1号作为日期初始值
cal.add(Calendar.MONTH, 2);// 当前月+2,即下2个月
cal.add(Calendar.DATE, -1);// 下2个月1号减去一天,即得到下1一个月最后一天
String currentMonth = df.format(cal.getTime());
return currentMonth;
} public static String format(Date date) {
if(null==date){
return null;
}
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatDate=format.format(date);
return formatDate;
} public static String format(Date date, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(formatStr);
String formatDate=format.format(date);
return formatDate;
} public static String format4Null(Date date, String formatStr) { if(date == null) {
return null;
} else { return format(date, formatStr);
}
} /**
* 得到2个字符串日期之间的日期差,返回结果以秒为单位
* @param beginTime
* @param endTime
* @return
* @throws ParseException
*/
public static Long getOffTime(String beginTime, String endTime) {
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{
java.util.Date begin = dfs.parse(beginTime);
java.util.Date end = dfs.parse(endTime);
long between = (end.getTime() - begin.getTime()) / 1000;// 除以1000是为了转换成秒
return between;
}catch(Exception e){
e.printStackTrace();
}
return null;
} public static String getYesterday(){
return getCurrentDate("yyyy-MM-dd",-1)+" 00:00:00";
} public static String getToday(){
return getCurrentDate("yyyy-MM-dd",0)+" 00:00:00";
} public static void main(String args[]){
} /**
* 昨天的起始终止
* >=起始 <终止
* @param nowTime
* @return
*/
public static Pair<Long, Long> getLastDay(long nowTime){
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
String s = sdf.format(new Date(nowTime));
Date yesdEnd = sdf.parse(s); return new Pair<Long, Long>(yesdEnd.getTime() - daySpan, yesdEnd.getTime());
}catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 取得上一个自然周起始(返回最近的周日0点为结束,之前一个周日0点为开始)
* >=起始 <终止
* @param nowTime
* @return
*/
public static Pair<Long, Long> getLastNativeWeek(long nowTime){
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
String s = sdf.format(new Date(nowTime));
Date yesdEnd = sdf.parse(s); // 今天0点 Calendar c = Calendar.getInstance();
c.setTime(yesdEnd);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
long weekEnd = c.getTimeInMillis();
return new Pair<Long, Long>(weekEnd - daySpan * 7, weekEnd);
}catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 取得上一个月的起始
* >=起始 <终止
* @param nowTime
* @return
*/
public static Pair<Long, Long> getLastMonth(long nowTime){
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-01 00:00:00");
String s = sdf.format(new Date(nowTime));
Date lmEnd = sdf.parse(s); // 本月1号0点 Calendar c = Calendar.getInstance();
c.setTime(lmEnd);
c.add(Calendar.MONTH, -1); return new Pair<Long, Long>(c.getTimeInMillis(), lmEnd.getTime());
}catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 计算两个日期之间相差的月数
* @param startDate 开始日期
* @param endDate 结束日期
* @return 两个日期之间相差的月数
*/
public static int dateIntervalMonth(Date startDate, Date endDate) { int intervalMonth = 0;
try {
if(startDate==null || endDate==null){
return intervalMonth;
}
Calendar starCal = Calendar.getInstance();
starCal.setTime(startDate); int sYear = starCal.get(Calendar.YEAR);
int sMonth = starCal.get(Calendar.MONTH); Calendar endCal = Calendar.getInstance();
endCal.setTime(endDate);
int eYear = endCal.get(Calendar.YEAR);
int eMonth = endCal.get(Calendar.MONTH); intervalMonth = ((eYear - sYear) * 12 + (eMonth - sMonth));
} catch (Exception e) {
intervalMonth = 0;
} return intervalMonth;
} /***
* 根据所选格式将字符串转换为日期类型
* @param dateStr 待转换的字符串
* @param formateRule 转换格式
* @return 日期类型结果
*/
public static Date convertAsDate(String dateStr, String formateRule) {
DateFormat fmt = new SimpleDateFormat(formateRule);
try {
if(dateStr == null) {
return null;
}
return fmt.parse(dateStr);
} catch (ParseException e) {
return null;
}
}
/**
* 自动把String时间转成Date类型
* @param dateStr
* @return
*/
public static Date autoConvertAsDate(String dateStr){
try {
if(null ==dateStr){
return null;
}
Object obj = StringUtils.convert(dateStr, Date.class);
if(null!=obj){
return (Date)obj;
}else{
return null;
}
} catch (Exception e) {
return null;
}
} public static SimpleDateFormat newTimeFormater(){
return new SimpleDateFormat(TIME_FORMAT_NORMAL);
}
/****
* 计算时间差,返回秒
* @param start
* @param end
* @return
*/
public static long timeDifference(long start,long end){
return (end-start)/1000;
} /* 判断输入的字符串是否是合法的生日 生日不能大于当前日期,支持 yyyy-MM-dd ,yyyyMMdd MM-dd-yyyy ,yyyy年MM月dd日等
* @param birthday 一个日期格式的字符串
* @param formats 期望转换后的日期格式数组
* @return
* */
public static boolean isRightDate(String birthday,String[] formats){ //记录传入的日期字符串,转换成日期类型
Date birth=null; //判断格式是否正确,默认值为false
boolean isRight=false;
for(String f:formats){
try {
birth =new SimpleDateFormat(f).parse(birthday);
//校验日期转换后是和传入的值不相同,说明日期传入有问题
if(!new SimpleDateFormat(f).format(birth).equals(birthday)){
return false;
}
isRight=true;
break;
} catch (ParseException e) {}
} if(isRight){
//获取当前日期的毫秒数
long now =new Date().getTime();
//获取生日的毫秒数
long birthTime = birth.getTime();
//如果当前时间小于生日,生日不合法。反之合法
return birthTime<=now;
}else{
//输入的参数类型不是日期类型,或者类型和过滤中设置的类型不匹配
return false;
}
}
/***
* 计算时间差,返回天数
* @param b_date 大时间
* @param s_date 小时间
* @return 天数
*/
public static long dateSubtract(Date b_date,Date s_date){
if(StringUtils.blank(s_date) || StringUtils.blank(b_date)){
return 0;
}else{
long dateLong1 = b_date.getTime();
long dateLong2 = s_date.getTime();
long day = (dateLong1-dateLong2)/1000/60/60/24;
return day;
}
}
}
DateUtil的更多相关文章
- JAVA 日期格式工具类DateUtil.java
DateUtil.java package pers.kangxu.datautils.utils; import java.text.SimpleDateFormat; import java.ut ...
- DateUtil(SimpleDateFormat)
import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class Da ...
- DateUtil工具类
package com.autoserve.mh.common.util; import java.text.SimpleDateFormat; import java.util.Calendar ...
- 邓博泽 java最全的DateUtil工具类
package com.kld.yijie.web.util; import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java. ...
- 整理的java的日期DateUtil
package cn.knet.data.untils; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...
- 日期工具类 - DateUtil.java
日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...
- 使用日期工具类:DateUtil
利用java开发,避免不了String.Date转换,前一天.后一天等问题.给出一个工具类,仅供学习交流. import java.text.DateFormat; import java.text. ...
- OpenCV 4 Python高级配置—安装setuptools,matplotlib,six,dateutil,pyparsing 完整过程
Matplotib 是python 的一个绘图库,里头有各种各样的绘图方法,可以用Matplotib 显示图像,放大图像,保存图像等等,对于OpenCV处理图像具有非常大的帮助.但是,安装Matplo ...
- Python 安装matplotlib,six,dateutil,pyparsing 完整过程
[摘要:正在做词频剖析的时间,须要用matlotlib 做图表,柱状图啥的,因而便最先了一个又一个的装置库的进程 由于matplotlib 须要依附很多其他科教盘算的第三圆库,须要一个一个的装置了.. ...
随机推荐
- Win7 64位 VS2013环境使用cuda_7.5.18
首先得吐槽下VS2015出来快一年了CUDA居然还不支持,没办法重装系统刚从2013升到2015,还得再装回一个2013用,只为学习CUDA... 然后安装的时候,如果你选择自定义组件安装,注意不要改 ...
- NIO概述
NIO API从Java1.4开始引用起就被广泛应用所使用.NIO API自带了IO非阻塞操作. java.nio.*包的结构: · Buffers 作为数据容器 · Chartsets 将容器中的数 ...
- Eclipse JAVA项目的 目录结构 和 导入
说明:本文所有测试以java工程为例: 1. Eclipse下的java工程目录 eclipse的基本工程目录叫做workspace,每个运行时的eclipse实例只能对应一个workspace,也就 ...
- Windows Phone 8.1 新特性 - 常用的启动器
本篇为大家介绍一下 Windows Phone 8.1 中部分常用启动器的实现方式.分别是 呼叫电话.发送短信.发送邮件.添加约会到日历.启动地图.地图路线显示.地图下载 和 地图更新. 1. 呼叫电 ...
- Mini projects #3 ---- Stopwatch: The Game
课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...
- 浅谈BFC
Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类型和 display属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不同的 Fo ...
- c++中的指针之指针在数组
使用一维指针数组输出一维数组中的数 int array[]={1,2,3,4,5,6}; int *p; p=array; for(int i=0;i<6;i++){ ...
- lua里面求int数组的union,diff,inter,distinct 方法实现
--利用lua中的table是哈希表这一点进行计算 function lua_distinct_union (union_t1,union_t2) if(union_t2==nil) then uni ...
- linux Ubuntu(Segmentation fault)段错误出现原因及调试方法
在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...
- JS获取各种浏览器窗口大小的方法
常用:JS 获取浏览器窗口大小复制代码 代码如下:// 获取窗口宽度if (window.innerWidth)winWidth = window.innerWidth;else if ((docum ...