package 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;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 时间工具类
*
* @author YaJun
*
*/
public class TimeUtil {
public static final int H_M = 0;
public static final int H_M_S = 1;
public static final int Y_M_D = 2;
public static final int Y_M_D_H_M = 3;
public static final int Y_M_D_H_M_S = 4;
public static final int MM = 5;
public static final int yyyyMMdd = 6;
public static final int MMdd = 7;
private static SimpleDateFormat dateformat0;
private static SimpleDateFormat dateformat1;
private static SimpleDateFormat dateformat2;
private static SimpleDateFormat dateformat3;
private static SimpleDateFormat dateformat4;
private static SimpleDateFormat dateformat5;
private static SimpleDateFormat dateformat6;
private static SimpleDateFormat dateformat7;
static{
dateformat0 = new SimpleDateFormat("HH:mm");
dateformat1 = new SimpleDateFormat("HH:mm:ss");
dateformat2 = new SimpleDateFormat("yyyy-MM-dd");
dateformat3 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
dateformat4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateformat5 = new SimpleDateFormat("MM");
dateformat6 = new SimpleDateFormat("yyyyMMdd");
dateformat7 = new SimpleDateFormat("MM-dd");
}
private static SimpleDateFormat getFormat(int num){
SimpleDateFormat dateformat = null;
switch(num){
case TimeUtil.H_M:
dateformat = dateformat0;
break;
case TimeUtil.H_M_S:
dateformat = dateformat1;
break;
case TimeUtil.Y_M_D:
dateformat = dateformat2;
break;
case TimeUtil.Y_M_D_H_M:
dateformat = dateformat3;
break;
case TimeUtil.Y_M_D_H_M_S:
dateformat = dateformat4;
break;
case TimeUtil.MM:
dateformat = dateformat5;
break;
case TimeUtil.yyyyMMdd:
dateformat = dateformat6;
break;
case TimeUtil.MMdd:
dateformat = dateformat7;
break;
default:break;
}
return dateformat;
}
public static String fromatDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date);
}
// 获取前一天时间
public static String getBeforeDateString(Date date, int days) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
return dateFormat.format(calendar.getTime());
}
// 获取前一天时间
public static Date getBeforeDate(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
return calendar.getTime();
}
public static String getBeforeYMD(Date date, int days) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
return dateFormat.format(calendar.getTime());
}
/**
* @param date
* @param num
* 前N小时
* @return
*/
public static String getBeforeHour(Date date, int num) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, -num);
return dateFormat.format(calendar.getTime());
}
// 返回系统当前日期,格式yyyyMMdd
public static String getNowDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
return dateFormat.format(new Date());
}
// 返回系统当前日期,格式yyyyMMdd
public static String getNowDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
return dateFormat.format(date);
}
// 返回系统当前日期,格式yyyyMMdd
public static String getYearAndMonth() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
return dateFormat.format(new Date());
}
// 返回系统当前日期,格式yyyyMMdd
public static String getYear(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
return dateFormat.format(new Date());
}
// 返回系统当前日期,格式MM
public static String getMonth(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
return dateFormat.format(date);
}
// 返回系统当前日期,格式dd
public static String getDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd");
return dateFormat.format(date);
}
public static String getNextYearAndMonth(Date date, int days) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + days);
return dateFormat.format(calendar.getTime());
}
// 返回系统当前日期,格式yyyy-MM-dd HH:mm:ss
public static String getDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
return dateFormat.format(calendar.getTime());
}
// 获取当前小时
public static int getNowHour() {
SimpleDateFormat sdf = new SimpleDateFormat("HH");
return Integer.parseInt(sdf.format(new Date()));
}
// 获取当前时间
public static int getNowMinute() {
SimpleDateFormat sdf = new SimpleDateFormat("mm");
return Integer.parseInt(sdf.format(new Date()));
}
// 获取昨天下午9点
public static String getYesterdayPMNine() {
String yesterday = getBeforeDateString(new Date(), -1);
return yesterday + " 21:00:00";
}
// 获取今天上午8点
public static String getTodayAMEight() {
String yesterday = getBeforeDateString(new Date(), 0);
return yesterday + " 08:00:00";
}
/**
* 计算规定时间(分钟)之前的时间
*
* @param minute
* @return
*/
public static String getTimeBefore(int minute) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
long time = date.getTime() - minute * 60 * 1000;
String t = dateFormat.format(time);
return t;
}
// 返回ymd时间
public static String getDate(int y, int m, int d) {
String date = "";
date = date + y;
if (m < 10) {
date = date + "0" + m;
} else {
date = date + m;
}
if (d < 10) {
date = date + "0" + d;
} else {
date = date + d;
}
return date;
}
/**
* 返回格日期
*
* @param num
* @param stringDate
* @return
*/
public static long getFormatDate(String stringDate) {
Date resultDate = null;
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
if (dateformat != null)
resultDate = dateformat.parse(stringDate);
return resultDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
/**
* 获得当天时间的毫秒数
*
* @return
*/
public static long gettoday() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
// java得到上个月的第一天
public static String getFirstMonthDay() {
String enddate = getLastMonthDay();
String[] ss = enddate.split("-");
String startdate = ss[0] + "-" + ss[1] + "-01";
return startdate;
}
// java得到上个月的最后一天
public static String getLastMonthDay() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
return dateFormat.format(cal.getTime());
}
// 将Date类型时间转化为String格式 yyyy-MM-dd HH:mm:ss
public static String transDate(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (date == null)
return null;
else
return dateFormat.format(date);
}
// 获取时间的年份 参数格式: yyyy-MM-dd
public static String getYear(String date) {
return date.substring(0, 4);
}
// 获取时间的月份 参数格式: yyyy-MM-dd
public static String getMonth(String date) {
return date.substring(5, 7);
}
// 获取时间的天 参数格式: yyyy-MM-dd
public static String getDay(String date) {
return date.substring(8, 10);
}
// 将两个日期转化为一个xx年xx月xx日到xx年xx月xx日的字符串
public static String transDate(String... date) {
String dateStr = "";
if (date.length == 2) {
String startdate = date[0];
String enddate = date[1];
String startyear = getYear(startdate);
String startmonth = getMonth(startdate);
String startday = getDay(startdate);
String endyear = getYear(enddate);
String endmonth = getMonth(enddate);
String endday = getDay(enddate);
dateStr = startyear + "年" + startmonth + "月" + startday + "日" + "到" + endyear + "年" + endmonth + "月"
+ endday + "日";
} else if (date.length == 1) {
String startdate = date[0];
String startyear = getYear(startdate);
String startmonth = getMonth(startdate);
String startday = getDay(startdate);
dateStr = startyear + "年" + startmonth + "月" + startday + "日";
}
return dateStr;
}
/**
* 日期格式转换
*
* @param pattern
* @param date
* @return
*/
public static String getFormatString(String pattern, Date date) {
SimpleDateFormat formater = new SimpleDateFormat(pattern);
String riqi = formater.format(date);
return riqi;
}
public static boolean isNumeric(String str) {
if (str == null)
return false;
Pattern pattern = Pattern.compile("[-]*[0-9]+");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public static String getYMD(long time) {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd");
return dateformat.format(new Date(time));
}
//java获取当前月每天的日期
public static List<String> getDayListOfMonth() {
List<String> list = new ArrayList<String>();
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
int year = aCalendar.get(Calendar.YEAR);//年份
int month = aCalendar.get(Calendar.MONTH)+1;//月份
int day = aCalendar.get(Calendar.DATE);
for (int i = 1; i <= day; i++) {
String aDate = String.valueOf(year)+"-"+month+"-"+i;
System.out.println(aDate);
list.add(aDate);
}
return list;
}
//获取指定日期所在月份的每一天月日
public static List<String> getDayListOfMonthorDay(Date date) {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
int month = c.get(Calendar.MONTH)+1;//月份
int day = c.get(Calendar.DATE);
//System.out.println(c.getTime());
//System.out.println(month);
//System.out.println(day);
for (int i = 1; i <= day; i++) {
String aDate = month+"月"+i+"日";
list.add(aDate);
}
return list;
}
/**
* 获取当前日期是星期几<br>
*
* @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];
}
// 获取当前时间所在周的开始日期
public static Date getFirstDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime();
}
// 获取当前时间所在周的结束日期
public static Date getLastDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
// 获取当前时间所在周的结束日期
public static List<Date> getDayOfWeek(Date date) {
List<Date> list = new ArrayList<Date>();
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
for (int i = 0; i < 7; i++) {
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + i); // Sunday
list.add(c.getTime());
}
return list;
}
/**
* 获取上一个月的时间
* @param date
* @param type 1上一周2上一月
* @return
*/
public static Date getFirstDate(Date date,int type){
Calendar cl = Calendar.getInstance();
cl.setTime(date);
// cl.add(Calendar.DAY_OF_YEAR, -1);
//一天
if (type == 1){
//一周
cl.add(Calendar.WEEK_OF_YEAR, -1);
}else {
cl.add(Calendar.MONTH, -1);
//从现在算,之前一个月,如果是2个月,那么-1-----》改为-2
}
return cl.getTime();
}
public static Date getFirstDateMonth(Date date,int type){
Calendar cl = Calendar.getInstance();
cl.setTime(date);
cl.add(Calendar.MONTH, type);
//从现在算,之前一个月,如果是2个月,那么-1-----》改为-2
return cl.getTime();
}
/**
* 返回格日期
* @param format
* @param stringDate
* @return
*/
public static Date getFormatDate(String format,String stringDate){
Date date = null;
try {
date = new SimpleDateFormat(format).parse(stringDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 获取指定日期所在月份开始的时间戳
* @param date 指定日期
* @return
*/
public static Date getMonthBegin(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
//设置为1号,当前日期既为本月第一天
c.set(Calendar.DAY_OF_MONTH, 1);
//将小时至0
c.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
c.set(Calendar.MINUTE, 0);
//将秒至0
c.set(Calendar.SECOND,0);
//将毫秒至0
c.set(Calendar.MILLISECOND, 0);
// 获取本月第一天的时间戳
return c.getTime();
}
/**
* 获取指定日期所在月份结束的时间戳
* @param date 指定日期
* @return
*/
public static Date getMonthEnd(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
//设置为当月最后一天
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
//将小时至23
c.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至59
c.set(Calendar.MINUTE, 59);
//将秒至59
c.set(Calendar.SECOND,59);
//将毫秒至999
c.set(Calendar.MILLISECOND, 999);
// 获取本月最后一天的时间戳
return c.getTime();
}
/**
* 将long型的秒转换为日期
* author YuWenLin
* date 2011-3-24 上午01:57:37
* @param num
* @param time
* @return
*/
public static String getFormatString(int num, long time){//time(秒)
if(time <=0)
return "0000-00-00";
else{
SimpleDateFormat dateformat = getFormat(num);
return dateformat==null?"0000-00-00":dateformat.format(new Date(time*1000));
}
}
/**
* 将long型的毫秒转换为日期
* author YuWenLin
* date 2011-3-24 上午01:58:23
* @param num
* @param time
* @return
*/
public static String getFormatMMSecondString(int num,long time){
if(time <=0)
return "0000-00-00";
else{
SimpleDateFormat dateformat = getFormat(num);
return dateformat==null?"0000-00-00":dateformat.format(new Date(time));
}
}
/**
* 返回格式化字符串型日期
* @param num
* @param date
* @return
*/
public static String getFormatString(int num, Date date){
if(date == null)
return "0000-00-00";
else{
SimpleDateFormat dateformat = getFormat(num);
return dateformat==null?"0000-00-00":dateformat.format(date);
}
}
/**
* 返回long(毫秒)
*/
public static long getFormatMillisecond(int num,String stringDate){
return getFormatDate(num,stringDate).getTime();
}
/**
* 返回long(秒)
*/
public static long getFormatSecond(int num,String stringDate){
return getFormatDate(num,stringDate).getTime()/1000;
}
/**
* 返回格日期
* @param num
* @param stringDate
* @return
*/
public static Date getFormatDate(int num, String stringDate){
Date resultDate = null;
SimpleDateFormat dateformat = getFormat(num);
try {
if(dateformat!=null)
resultDate = dateformat.parse(stringDate);
} catch (ParseException e) {
e.printStackTrace();
}
return resultDate;
}
public static void main(String[] args) {
//System.out.println(getWeekOfDate(new Date()));
//System.out.println(getLastMonthDay());
//System.out.println(getFirstMonthDay());
//System.out.println(getDate(getMonthBegin(new Date())));
//System.out.println(getDate(getMonthEnd(new Date())));
//System.out.println(getDate(getFirstDayOfWeek(new Date())));
//System.out.println(getDate(getLastDayOfWeek(new Date())));
/*List<Date> list = getDayOfWeek(new Date());
String[] weekDays = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ,"星期日", };
for (int i = 0; i < list.size(); i++) {
System.out.println(getDate(list.get(i)));
System.out.println(weekDays[i]);
}*/
/*System.out.println(getFormatDate("yyyy-MM-dd","2018-03-05"));
List<String> listm = getDayListOfMonthorDay(new Date());
for (int i = 0; i < listm.size(); i++) {
System.out.println(listm.get(i));
}*/
//System.out.println(getFormatDate(2,"2018-09-01"));
System.out.println(new SimpleDateFormat("yyyyMM").format(getFirstDateMonth(new Date(),1)));
/*String firstDay = TimeUtil.getFormatString(2,TimeUtil.getFirstDayOfWeek(getFormatDate(2,"2018-09-01")));
String lastDay= TimeUtil.getFormatString(2,TimeUtil.getLastDayOfWeek(getFormatDate(2,"2018-09-01")));
System.out.println (firstDay);
System.out.println (lastDay);*/
}
}