📄 datetimeutil.java
字号:
package com.fendou.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @title DateTimeUtil
* @description 日期转换工具
* @copyright Copyright (c) 2009 www.fendou.com
* @author fendou
* @since 2009-2-18
* @version 1.0
*/
public class DateTimeUtil {
/**
* @description 将毫秒转换为时分秒
* @param millSeconds long
* @return String
*/
public static String convertMillSecondsToHMS(long millSeconds)
{
long allSecond = millSeconds / 1000L;
long hour = allSecond / 3600L;
long minute = (allSecond - hour * 3600L) / 60L;
long second = allSecond - hour * 3600L - minute * 60L;
String retString = "";
String strHour = String.valueOf(hour);
if(strHour.length() <= 1)
strHour = (new StringBuilder()).append("0").append(strHour).toString();
String strMinute = String.valueOf(minute);
if(strMinute.length() <= 1)
strMinute = (new StringBuilder()).append("0").append(strMinute).toString();
String strSecond = String.valueOf(second);
if(strSecond.length() <= 1)
strSecond = (new StringBuilder()).append("0").append(strSecond).toString();
retString = (new StringBuilder()).append(strHour).append(":").append(strMinute).append(":").append(strSecond).toString();
return retString;
}
/**
* @description 以指定的条件计算出日期
* @param dealLength int
* @param addCondition int 0: add by months , 1 :add by hours, 2: add by days, 3:add by minute
* @return Date
*/
public static Date getDateTime(int dealLength, int addCondition) {
Date date = null;
Calendar cal = null;
try {
cal = Calendar.getInstance();
switch (addCondition) {
case 0:
cal.add(Calendar.MONTH, dealLength);
break;
case 1:
cal.add(Calendar.HOUR, dealLength);
break;
case 2:
cal.add(Calendar.HOUR, dealLength * 24);
break;
case 3:
cal.add(Calendar.MINUTE, dealLength);
break;
}
date = cal.getTime();
} catch (Exception e) {
System.err.println("���日期处理出错!" + e.toString());
}
return date;
}
/**
* @description 以指定的条件计算出日期
* @param dealLength int
* @param addCondition int 0: add by months , 1 :add by hours, 2: add by days, 3:add by minute
* @return String
*/
public static String getDateTimeString(int dealLength, int addCondition) {
String date = "";
Calendar cal = null;
try {
cal = Calendar.getInstance();
java.text.SimpleDateFormat simple = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
switch (addCondition) {
case 0:
cal.add(Calendar.MONTH, dealLength);
break;
case 1:
cal.add(Calendar.HOUR, dealLength);
break;
case 2:
cal.add(Calendar.HOUR, dealLength * 24);
break;
case 3:
cal.add(Calendar.MINUTE,dealLength);
}
date = simple.format(cal.getTime());
} catch (Exception e) {
System.err.println("日期处理出错!" + e.toString());
}
return date;
}
/**
* @description 获得当前日期
* @return String
*/
public static String now() {
String strNow = "";
Calendar cal = null;
try {
cal = Calendar.getInstance();
java.text.SimpleDateFormat simple = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
strNow = simple.format(cal.getTime());
} catch (Exception e) {
System.err.println(e.toString());
}
return strNow;
}
/**
* @description 获得今年之后的年份
* @param iLaterYears int
* @return String
*/
public static String nextYear(int iLaterYears) {
String strNow = "";
Calendar cal = null;
try {
cal = Calendar.getInstance();
java.text.SimpleDateFormat simple = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cal.add(Calendar.YEAR, iLaterYears);
strNow = simple.format(cal.getTime());
} catch (Exception e) {
System.err.println("日期处理出错!" + e.toString());
}
return strNow;
}
/**
* @description 获得一星期开始的日期
* @return Date
*/
public static Date getWeekStartDate() {
Calendar calendar = Calendar.getInstance();
Date firstDateOfWeek;
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));
firstDateOfWeek = calendar.getTime();
calendar.add(Calendar.DAY_OF_WEEK, 6);
return firstDateOfWeek;
}
/**
* @description 获得一星期结束的日期
* @return Date
*/
public static Date getWeekEndDate() {
Calendar calendar = Calendar.getInstance();
Date lastDateOfWeek;
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));
calendar.add(Calendar.DAY_OF_WEEK, 6);
lastDateOfWeek = calendar.getTime();
return lastDateOfWeek;
}
/**
* @description 获得一个月开始的日期
* @return Date
*/
public static Date getMonthStart() {
Calendar calendar = Calendar.getInstance();
Date firstDateOfMonth;
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
calendar.add(Calendar.DAY_OF_MONTH, -(dayOfMonth - 1));
firstDateOfMonth = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH) - 1);
return firstDateOfMonth;
}
/**
* @description 获得一个月结束的日期
* @return Date
*/
public static Date getMonthEndDate() {
Calendar calendar = Calendar.getInstance();
Date lastDateOfMonth;
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
calendar.add(Calendar.DAY_OF_MONTH, -(dayOfMonth - 1));
calendar.add(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH) - 1);
lastDateOfMonth = calendar.getTime();
return lastDateOfMonth;
}
/**
* @description 将日期转换为字符
* @param date Date
* @return String
*/
public static String convertDateToStr(Date date) {
if (null == date) {
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* @description 将日期转换为字符
* @param date Date
* @param pattern String
* @return String
*/
public static String convertDateToStr(Date date, String pattern) {
if (null == date) {
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* @description 将字符转换为日期
* @param strDate String
* @return Date
*/
public static Date convertStrToDate(String strDate) {
if (null == strDate) {
return null;
}
if (strDate.trim().length() == 10) {
strDate += " 00:00:00";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return sdf.parse(strDate);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* @description 将指定格式的字符串转换为日期型
* @param strDate String
* @param pattern String
* @return Date
*/
public static Date convertStrToDate(String strDate, String pattern) {
if (null == strDate) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(strDate);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* @description 计算俩个日期之间相隔的天数
* @param startDate Date
* @param endDate Date
* @return int
*/
public static int gapDate(Date startDate, Date endDate) {
long beginTime = startDate.getTime();
long endTime2 = endDate.getTime();
long betweenDays = (long) ((endTime2 - beginTime) / (1000 * 60 * 60 * 24) + 0.5);
return (int) betweenDays;
}
/**
* @description 计算俩个日期之间相隔的小时数
* @param startTime Date
* @param endDate Date
* @return long
*/
public static long gapHours(Date startTime, Date endTime) {
long interval = (endTime.getTime() - startTime.getTime());
return interval / 1000;
}
/**
* @description 比较两个日期的顺序
* @param strDate1 String
* @param strDate2 String
* @param pattern String
* @return i int
* @throws ParseException
*/
public static int compareDate(String strDate1, String strDate2, String pattern) throws ParseException {
int i;
SimpleDateFormat sf = new SimpleDateFormat(pattern);
Date dt = sf.parse(strDate1);
i = dt.compareTo(sf.parse(strDate2));
return i;
}
/**
* @description 将秒数转换为小时:分钟:秒的格式
* @param seconds long
* @return String
*/
public static String convertSecondToString(long seconds){
long lOnLineHour=seconds/3600;
long lOnLineMinute=(seconds%3600)/60;
long lOnLineSecond=(seconds%3600)%60;
String strTime=String.format("%02d:%02d:%02d", lOnLineHour,lOnLineMinute,lOnLineSecond);
return strTime;
}
/**
* @description 获得指定年指定月份的天数
* @param year int
* @param month int
* @return int
*/
public static int getDaysOfMonth(int year,int month)
{
//闰年2月29天,平年2月29天,其他大月31天,小月30天
//能够被400整除是闰年,能够被4整除,而不能被100整除的,也是闰年
int nDaysOfMonth=0;
if((year%400==0)||((year%4==0)&&(year%100!=0)))//闰年
{
if(month==2)
{
nDaysOfMonth=29;
}
else
{
nDaysOfMonth=28;
}
}
else
{
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))//大月
{
nDaysOfMonth=31;
}
else//小月
{
nDaysOfMonth=30;
}
}
return nDaysOfMonth;
}
/**
* @title getTotalWeeks
* @description 从fromDate开始计算tillDate目前是从fromDate起的第几周
* @param startDate Date
* @param endDate Date
* @return int
*/
public static int getTotalWeeks(Date startDate,Date endDate){
//一共多少天
long lTotalDays=(endDate.getTime()-startDate.getTime())/(24*60*60*1000);
String strTemp=String.valueOf(lTotalDays);
int totalDays=Integer.parseInt(strTemp);
//开始时间是星期几
Calendar calendar=Calendar.getInstance();
calendar.setTime(startDate);
int nDayWeekOfStartDate=calendar.get(Calendar.DAY_OF_WEEK);
if(nDayWeekOfStartDate==1)//sunday
totalDays-=1;
if(nDayWeekOfStartDate==2)//monday
totalDays-=7;
if(nDayWeekOfStartDate==3)//tuesday
totalDays-=6;
if(nDayWeekOfStartDate==4)//wednesday
totalDays-=5;
if(nDayWeekOfStartDate==5)//thurday
totalDays-=4;
if(nDayWeekOfStartDate==6)//friday
totalDays-=3;
if(nDayWeekOfStartDate==7)//saturday
totalDays-=2;
int weekIndex=totalDays/7+1;
if(totalDays%7>0){
weekIndex+=1;
}
return weekIndex;
}
/**
* @title getWeekStartAndEndDate
* @description 获得从指定日期开始的第几周的的开始和结束日期
* @param weekDate Date
* @param weekIndex int
* @return Date[] Date[0] 开始时间 Date[1]结束时间
*/
public static Date[] getWeekStartAndEndDate(Date weekDate,int weekIndex){
Calendar cal = Calendar.getInstance();
cal.setTime(weekDate);
if(weekIndex>1)
cal.add(Calendar.DATE, (weekIndex-1)*7);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
Calendar calFirstDayInThisWeek = (Calendar)cal.clone();
Calendar calLastDayInThisWeek = (Calendar)cal.clone();
//换算成中国时间
if(dayOfWeek==1)//sunday,结束时间即当前时间,开始时间为当前时间-6
{
calFirstDayInThisWeek.add(Calendar.DATE, -6);
}
else if(dayOfWeek==2)//monday,开始时间为当前时间,结束时间为当前时间+6
{
calLastDayInThisWeek.add(Calendar.DATE, 6);
}
else if(dayOfWeek==3)//tuesday,开始时间为当前时间-1,结束时间为当前时间+5
{
calFirstDayInThisWeek.add(Calendar.DATE, -1);
calLastDayInThisWeek.add(Calendar.DATE, 5);
}
else if(dayOfWeek==4)//wendnesday,开始时间为当前时间-2,结束时间为当前时间+4
{
calFirstDayInThisWeek.add(Calendar.DATE, -2);
calLastDayInThisWeek.add(Calendar.DATE, 4);
}
else if(dayOfWeek==5)//tuesday,开始时间为当前时间-3,结束时间为当前时间+3
{
calFirstDayInThisWeek.add(Calendar.DATE, -3);
calLastDayInThisWeek.add(Calendar.DATE, 3);
}
else if(dayOfWeek==6)//friday,开始时间为当前时间-4,结束时间为当前时间+2
{
calFirstDayInThisWeek.add(Calendar.DATE, -4);
calLastDayInThisWeek.add(Calendar.DATE, 2);
}
else if(dayOfWeek==7)//staurday,开始时间为当前时间-5,结束时间为当前时间+1
{
calFirstDayInThisWeek.add(Calendar.DATE, -5);
calLastDayInThisWeek.add(Calendar.DATE, 1);
}
calFirstDayInThisWeek.set(Calendar.HOUR, 0);
calFirstDayInThisWeek.set(Calendar.MINUTE, 0);
calFirstDayInThisWeek.set(Calendar.SECOND, 0);
calLastDayInThisWeek.set(Calendar.HOUR, 23);
calLastDayInThisWeek.set(Calendar.MINUTE, 59);
calLastDayInThisWeek.set(Calendar.SECOND, 59);
Date[] retDate=new Date[2];
retDate[0]=calFirstDayInThisWeek.getTime();
retDate[1]=calLastDayInThisWeek.getTime();
return retDate;
}
/**
* @title getDateList
* @description 获得传入时间范围内的日期列表
* @param startDate Date 时间范围开始值
* @param endDate Date 时间范围截止值
* @param pattern String 日期串的格式yyyy-MM-dd;MM-dd;MM;dd
* @return List(Sting)
* @throws Exception
*/
public static List<String> getDateList(Date startDate,Date endDate,String pattern) throws Exception{
List<String> dateList = new ArrayList<String>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
while(calendar.getTime().before(endDate)){
dateList.add(DateTimeUtil.convertDateToStr(calendar.getTime(), pattern));
calendar.add(Calendar.DATE, 1);
}
return dateList;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -