1、整体结构:
2、JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别
HH是24小时制,hh是12小时制
Java里面MM表示月 mm表示分钟 HH表示 24小时制 hh表示12小时制mm与m等,它们的区别为是否有前导零:H,m,s表示非零开始,HH,mm,ss表示从零开始。 比如凌晨1点2分,HH:mm显示为01:02,H:m显示为1:2
例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制 String date1 = "2017-04-23 16:45:12"; try { sdf.parse(date1); System.out.println(sdf.format(sdf.parse(date1))); //2017-04-23 16:45:12 System.out.println(sdf1.format(sdf.parse(date1))); //2017-04-23 04:45:12 } catch (ParseException e) { e.printStackTrace(); }
3、字符串--时间互转:
//
public static Date dateParse(String param, String format) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(format);//yyyy-MM-dd HH:mm:ss
try {
date = sdf.parse(param);
} catch (ParseException ex) {
ex.printStackTrace();
}
return date;
}
//
public static String dateToStr(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String dataStr=null;
try {
dataStr=sdf.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dataStr;
}
/*
* 将当前日期加减n天数。
如传入字符型 "-5 " 意为将当前日期减去5天的日期
如传入字符型 "5 " 意为将当前日期加上5天后的日期 返回字串
* 例(2000-02-01)
*/
public static Date dateAdd(int strTo) {
Calendar strDate = Calendar.getInstance(); // java.util包
strDate.add(strDate.DATE, strTo); // 日期减 如果不够减会将月变动
return strDate.getTime();
}
4、获取需要的时间格式:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//获取前月的第一天2018-10-01
Calendar cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);//增加到第几个月的
cale.set(Calendar.DAY_OF_MONTH, 1);//设置第几天的
String firstDay = format.format(cale.getTime());
System.out.println("-----1------当前月第一天"+firstDay);
//获取当前时间2018-10-11
String currentTime = format.format(new Date());
System.out.println("-----2------当前时间 " + currentTime);
//获取上月的第一天2018-9-01
Calendar cal_1 = Calendar.getInstance();
cal_1.add(Calendar.MONTH, -1);
cal_1.set(Calendar.DAY_OF_MONTH,1);
String previousFirstDay = format.format(cal_1.getTime());
System.out.println("-----3------上月第一天:"+previousFirstDay);
//2018-09-11
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
String defaultStartDate = format.format(cal.getTime());
System.out.println("-----4------上月当前时间:"+defaultStartDate);
//2017-10-01
Calendar call = Calendar.getInstance();
call.add(Calendar.YEAR, -1);
call.set(Calendar.DAY_OF_MONTH, 1);
String previous = format.format(call.getTime());
System.out.println("-----5------上一年当前月第一天:"+previous);
//2017-10-11
Calendar ca = Calendar.getInstance();
ca.add(Calendar.YEAR, -1);
String previousCurrentTime = format.format(ca.getTime());
System.out.println("-----6------上一年当前月当前时间:"+previousCurrentTime);
//2018-01-01
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH, 1);
String time = format.format(c.getTime());
System.out.println("-----7------第一月第一天:"+time);
//2017-01-01
Calendar cc = Calendar.getInstance();
cc.add(Calendar.YEAR, -1);
cc.set(Calendar.MONTH, 0);
cc.set(Calendar.DAY_OF_MONTH, 1);
String year = format.format(cc.getTime());
System.out.println("-----8------前一年第一月第一天:"+year);
/**
* 获取某段时间内的周一(二等等)的日期
* @param dataBegin 开始日期 2020-07-04
* @param dataEnd 结束日期 2020-07-14
* @param weekDays 获取周几,1-6代表周一到周六。0代表周日
* @return 返回日期List
*/
public static List<String> getDayOfWeekWithinDateInterval(Date dataBegin, Date dataEnd, int weekDays) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> dateResult = new ArrayList<>();
Calendar cal = Calendar.getInstance();
String[] dateInterval = {sdf.format(dataBegin),sdf.format(dataEnd) };
Date[] dates = new Date[dateInterval.length];
for (int i = 0; i < dateInterval.length; i++) {
String[] ymd = dateInterval[i].split("[^\\d]+");
cal.set(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2]));
dates[i] = cal.getTime();
}
for (Date date = dates[0]; date.compareTo(dates[1]) <= 0; ) {
cal.setTime(date);
if (cal.get(Calendar.DAY_OF_WEEK) - 1 == weekDays) {
String format = sdf.format(date);
dateResult.add(format);
}
cal.add(Calendar.DATE, 1);
date = cal.getTime();
}
return dateResult;
}
/**
* 在时间间隔中统计出有几个5号
* @return
* @author Jia
* @date 2020/7/30
**/
public static int countDays(Date sdate,Date eDate){
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
List<String> list=new ArrayList<String>();
while (sdate.getTime()<=eDate.getTime()) {
list.add(df.format(sdate));
c.setTime(sdate);
c.add(Calendar.DATE, 1); // 日期加1天
sdate = c.getTime();
}
int count = 0;
for (int i = 0; i < list.size(); i++) {
String str = list.get(i).substring(8);
if("05".equals(str)){
count = count +1;
}
System.out.println(str);
}
return count;
}