日常开发中常用时间转换
package com.somnus.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.junit.Test;
import com.somnus.enums.SnadWeekEnum;
public class DateUtil {
// 格式:年-月-日 小时:分钟:秒
public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";
// 格式:年-月-日 小时:分钟
public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";
// 格式:年月日
public static final String FORMAT_THREE = "yyyyMMdd";
// 格式:年-月-日
public static final String FORMAT_FOUR = "yyyy-MM-dd";
// 格式:时分秒
public static final String FORMAT_FIVE = "HH:mm:ss";
/**
* @description yyyy-MM-dd 转换为 yyyyMMdd
* @param datestr
* @return
*/
public static String convert2yyyyMMdd(String datestr){
return datestr.replaceAll("(\\d{4})-(\\d{2})-(\\d{2})","$1$2$3");
}
/**
* @description yyyyMMdd 转换为 yyyy-MM-dd
* @param datestr
* @return
*/
public static String convert2yyyy_MM_dd(String datestr){
return datestr.replaceAll("(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3");
}
/**
*
* @Description: 将字符串从一种格式转化的
* @param @param src 日期原串
* @param @param infmt 日期输入格式
* @param @param outfmt 日期输出格式
* @param @return 目标日期字符串
* @throws ParseException
*/
public static String getFmtDateStr(String src,String infmt,String outfmt) throws ParseException {
//输入格式
DateFormat informater = new SimpleDateFormat(infmt);
//输出格式
DateFormat outfomater = new SimpleDateFormat(outfmt);
String result = outfomater.format(informater.parse(src));
return result;
}
/**
* 把符合日期格式的字符串转换为日期类型
* @throws ParseException
*/
public static Date stringtoDate(String dateStr, String format) throws ParseException {
SimpleDateFormat formater = new SimpleDateFormat(format);
formater.setLenient(false);
Date d = formater.parse(dateStr);
return d;
}
/**
* 把日期转换为字符串
*/
public static String dateToString(java.util.Date date, String format) {
SimpleDateFormat formater = new SimpleDateFormat(format);
String result = formater.format(date);
return result;
}
/**
* @param dateKind
* 指定处理年、月、日
* @param dateStr
* 指定日期
* @param amount
* 指定长度
* @return
* @throws ParseException
*/
public static String dateSub(int dateKind, String dateStr, int amount) throws ParseException {
Date date = stringtoDate(dateStr, FORMAT_ONE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateKind, amount);
return dateToString(calendar.getTime(), FORMAT_ONE);
}
/**
*
* @param days
* @return 返回一个相加减后的日期 yyyy-MM-dd
*/
public static String dateSub(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, days);
return dateToString(calendar.getTime(), FORMAT_FOUR);
}
/**
* 两个日期相减
*
* @return 相减得到的秒数
* @throws ParseException
*/
public static long timeSub(String firstTime, String secTime) throws ParseException {
long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
long second = stringtoDate(secTime, FORMAT_ONE).getTime();
return (second - first) / 1000;
}
/**
* 获取某年某月的天数
*/
public static int getDaysOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 返回日期的年
*/
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 返回日期的月份,1-12
*/
public static int getMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 返回日期的日1-31
*/
public static int getDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
}
/**
* 返回日期的时
*/
public static int getHour(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.HOUR);
}
/**
* 返回日期的分
*/
public static int getMinute(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MINUTE);
}
/**
* 返回日期的秒
*/
public static int getSecond(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.SECOND);
}
/**
* 返回日期在一个年中是第几天
*/
public static int getDayOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_YEAR);
}
/**
* 返回日期在一个月中是第几天
*/
public static int getDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 返回日期在一个周中是第几天
*/
public static int getDayOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK) - 1;
}
/**
* 返回日期在一个月中是第几周
*/
public static int getDayOfWeekInMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
}
/**
* 返回日期在一个年中是第几周
*/
public static int getWeekOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
/**
* 返回当前日期是星期几
* @param date
* @return
*/
public static String getWeekOfDate(Date date) {
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0){
w = 0;
}
return weekDays[w];
}
/**
* 返回当前日期是星期几
* 0星期日1星期一2星期二3星期三4星期四5星期五6星期六
* @param date
* @return
*/
public static Integer getWeekOfDate2(Date date) {
Integer[] weekDays = { 0, 1, 2, 3, 4, 5, 6};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0){
w = 0;
}
return weekDays[w];
}
/**
* 返回当前日期是星期几
* 用org.apache.commons.lang3.time.DateFormatUtils
* @param date
* @return 返回结果是星期日,星期一,星期二,星期三,星期四,星期五,星期六
*/
public static String getWeekOfDate3(Date date) {
return DateFormatUtils.format(date, "E");
}
/**
* 获取两个日期之间的所有日期
* 备注:包含开始和结束时间
* @param begin
* @param end
* @return
*/
public static List<Date> getBetweenDate1(Date begin, Date end) {
List<Date> result = new ArrayList<Date>();
//用Calendar 进行日期比较判断
Calendar calendar = Calendar.getInstance();
while(begin.getTime()<=end.getTime()){
// 把日期添加到集合
result.add(begin);
// 设置日期
calendar.setTime(begin);
//把日期增加一天
calendar.add(Calendar.DAY_OF_YEAR, 1);
// 获取增加后的日期
begin = calendar.getTime();
}
return result;
}
/**
* 获取两个日期之间的所有日期
* 备注:包含开始和结束时间
* @param startTime
* @param endTime
* @return
*/
public static List<String> getBetweenDate2(String startTime, String endTime){
// 声明保存日期集合
List<String> result = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_ONE);
try {
// 转化成日期类型
Date startDate = sdf.parse(startTime);
Date endDate = sdf.parse(endTime);
//用Calendar 进行日期比较判断
Calendar calendar = Calendar.getInstance();
while (startDate.getTime()<=endDate.getTime()){
// 把日期添加到集合
result.add(sdf.format(startDate));
// 设置日期
calendar.setTime(startDate);
//把日期增加一天
calendar.add(Calendar.DATE, 1);
// 获取增加后的日期
startDate=calendar.getTime();
}
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* 计算两个日期相差的天数,如果date1 > date2 返回正数,否则返回负数
*/
public static long dayDiff(Date date1, Date date2) {
long diff = Math.abs(date1.getTime() - date2.getTime());
diff /= 3600 * 1000 * 24;
return diff;
}
/**
* 比较两个日期的年差
* @throws ParseException
*/
public static int yearDiff(String before, String after) throws ParseException {
Date beforeDay = stringtoDate(before, FORMAT_FOUR);
Date afterDay = stringtoDate(after, FORMAT_FOUR);
return getYear(afterDay) - getYear(beforeDay);
}
/**
* 比较指定日期与当前日期的差
* @throws ParseException
*/
public static int yearDiffCurr(String after) throws ParseException {
return yearDiff(getSysCurrentDate(), after);
}
/**
* 获取当前时间的指定格式
*/
public static String getCurrDate(String format) {
return dateToString(new Date(), format);
}
/**
* @return 当前系统时间 yyyy-MM-dd HH24:MI:SS
*/
public static String getSysCurrentDateTime(){
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_ONE);
String time = sdf.format(new java.util.Date());
return time;
}
/**
* @return 当前系统时间 yyyy-MM-dd
*/
public static String getSysCurrentDate(){
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_FOUR);
String time = sdf.format(new java.util.Date());
return time;
}
/**
* @return 当前系统时间 HH24:MI:SS
*/
public static String getSysCurrentTime(){
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_FIVE);
String time = sdf.format(new java.util.Date());
return time;
}
/**
* 获取指定时间的毫秒值
* 备注:
* new Date().getTime()
* 返回:13位的毫秒数,记录1970年1月1日到现在一共经历了多长时间
* 注意:13位数字,单位是毫秒;10位数字,单位是秒
* @param date
* @return
*/
public static long getSysCurrentSecond(Date date){
//精确到毫秒
long time = date.getTime();
//精确到秒
//long time2=date.getTime()/1000;
return time;
}
//测试
public static void main(String[] args) throws ParseException {
System.out.println("当前时间:" + DateUtil.getCurrDate(FORMAT_ONE));
System.out.println("当前时间:" + DateUtil.getSysCurrentDate());
System.out.println("某年某月的最大天数:" + DateUtil.getDaysOfMonth(2011, 5));
System.out.println("当前日期+2:" + DateUtil.dateSub(2));
System.out.println("指定日期+2:"
+ DateUtil.dateSub(Calendar.DAY_OF_YEAR, "2014-01-01 00:00:00",
2));
System.out.println("yyyy-MM-dd转换成yyyyMMdd:"
+ DateUtil.convert2yyyyMMdd("2014-03-08"));
System.out.println("yyyyMMdd转换成yyyy-MM-dd:"
+ DateUtil.convert2yyyy_MM_dd("20140308"));
System.out.println("Date转换为String:"
+ DateUtil.dateToString(new Date(), FORMAT_ONE));
System.out.println("String转换为Date:"
+ DateUtil.stringtoDate("2014-03-07 15:12:27", FORMAT_ONE));
System.out.println("两个日期相差的天数:"
+ DateUtil.dayDiff(new Date(), DateUtil.stringtoDate(
"2014-01-01 00:00:00", FORMAT_ONE)));
System.out.println("返回日期的年:" + DateUtil.getYear(new Date()));// YEAR
System.out.println("返回日期的月:" + DateUtil.getMonth(new Date()));// MONTH
System.out.println("返回日期的日:" + DateUtil.getDay(new Date()));// DATE
System.out.println("返回日期的时:" + DateUtil.getHour(new Date()));// HOUR
System.out.println("返回日期的分:" + DateUtil.getMinute(new Date()));// MINUTE
System.out.println("返回日期的秒:" + DateUtil.getSecond(new Date()));// SECOND
System.out.println("日期在一个年中是第几天:" + DateUtil.getDayOfYear(new Date()));// WEEK_OF_YEAR
System.out.println("日期在一个月中是第几天:" + DateUtil.getDayOfMonth(new Date()));// DAY_OF_MONTH
System.out.println("日期在一个周中是第几天:" + DateUtil.getDayOfWeek(new Date()));// DAY_OF_WEEK
System.out.println("日期在一个月中是第几周:"
+ DateUtil.getDayOfWeekInMonth(new Date()));// DAY_OF_WEEK_IN_MONTH
System.out.println("返回日期在一个年中是第几周:"
+ DateUtil.getWeekOfYear(new Date()));// WEEK_OF_MONTH
System.out.println("两个日期的年差:"
+ DateUtil.yearDiff("2013-01-01", "2014-01-01"));
System.out
.println("指定日期与当前日期的差:" + DateUtil.yearDiffCurr("2013-01-01"));
}
@Test
public void testAA() throws ParseException{
String time="2019-01-27 00:00:00";
Date date = stringtoDate(time,FORMAT_ONE);
Integer weekOfDate2 = getWeekOfDate2(date);
System.out.println("weekOfDate2:"+weekOfDate2);
String weekOfDate3 = getWeekOfDate3(date);
System.out.println("weekOfDate3:"+weekOfDate3);
Integer code=SnadWeekEnum.getCodeByWeek(weekOfDate3);
System.out.println("code:"+code);
String startTime="2019-01-26 00:00:00";
String endTime="2019-01-28 23:59:59";
Date startDate=stringtoDate(startTime,FORMAT_ONE);
Date endDate=stringtoDate(endTime,FORMAT_ONE);
List<Date> getBetweenDate1 = getBetweenDate1(startDate, endDate);
System.out.println("getBetweenDate1:"+getBetweenDate1.toString());
List<String> getBetweenDate2 = getBetweenDate2(startTime, endTime);
System.out.println("getBetweenDate2:"+getBetweenDate2.toString());
}
}