获取时间段集合
js
setHouseRatesColumn(‘2022-08-20’, ‘2022-08-25’);
[“2022-08-20”, “2022-08-21”, “2022-08-22”, “2022-08-23”, “2022-08-24”, “2022-08-25”]
setHouseRatesColumn(‘2022-08-01’, ‘2022-08-31’, 1);//星期几
[“2022-08-01”, “2022-08-08”, “2022-08-15”, “2022-08-22”, “2022-08-29”]
//获取时间段集合
function setHouseRatesColumn(startTime, endTime, week) {
// 获取时间段内的所有日期/指定星期几的日期
week = week == 7 ? 0 : week;
let dateList = [];
startTime = new Date(startTime);
endTime = new Date(endTime);
while ((endTime.getTime() - startTime.getTime()) >= 0) {
let year = startTime.getFullYear();
let month = startTime.getMonth() + 1 < 10 ? '0' + (startTime.getMonth() + 1) : startTime.getMonth() + 1;
let day = startTime.getDate().toString().length == 1 ? '0' + startTime.getDate() : startTime.getDate();
if(isNaN(week) || startTime.getDay() == week) {
dateList.push(`${year}-${month}-${day}`);
}
startTime.setDate(startTime.getDate() + 1);
}
return dateList;
}
java
List dataList = getDays(“2022-08-20”, “2022-08-27”);
private List<String> getDays(final String bigtimeStr, final String endTimeStr) throws ParseException {
Date bigtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(bigtimeStr + " 00:00:00");
Date endtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endTimeStr + " 00:00:00");
//定义一个接受时间的集合
List<Date> lDate = new ArrayList<Date>();
lDate.add(bigtime);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(bigtime);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(endtime);
// 测试此日期是否在指定日期之后
while (endtime.after(calBegin.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
List<String> datas = new LinkedList<String>();
for (Date date : lDate) {
datas.add(new SimpleDateFormat("yyyy-MM-dd").format(date));
}
return datas;
}
获取当前时间
String date = new SimpleDateFormat(“yyyy-MM-dd”).format(new Date());
TimeUtils.format(new Date(), TimeUtils.YYYY_MM_DD_HH_MM_SS)
yyyyMMddHHmmssSSS
获取指定时间的上个月
settleMonth:202212
nextSettleMonth:202301
try {
SimpleDateFormat settleMonth = new SimpleDateFormat ("yyyyMM");
Date date = settleMonth.parse (billVo.getSettleMonth());
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, 1);
SimpleDateFormat nextSettleMonth = new SimpleDateFormat("yyyyMM");
billVo.setNextSettleMonth(nextSettleMonth.format (cal.getTime ()));
} catch (ParseException e) {
e.printStackTrace();
}
Calendar
Calendar.YEAR:年份。
Calendar.MONTH:月份。
Calendar.DATE:日期。
Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
Calendar.HOUR:12小时制的小时。
Calendar.HOUR_OF_DAY:24 小时制的小时。
Calendar.MINUTE:分钟。
Calendar.SECOND:秒。
Calendar.DAY_OF_WEEK:星期几。
获取当前时间 – 月份
(没通过.set()或者.setTime()方法设置指定时间的话 .get(Calendar.MONTH) 获取到到的月份就是从0开始的)
int month = Calendar.getInstance().get(Calendar.MONTH);
如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。
Calendar calendar = Calendar.getInstance(); // 如果不设置时间,则默认为当前时间
calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:" + calendar.getTime()); // 获取当前时间
int year = calendar.get(Calendar.YEAR); // 获取当前年份
System.out.println("现在是" + year + "年");
int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加 1)
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 5, 1); // 实际的calendar对象所表示的日期为2016年6月1日
int month = calendar.get(Calendar.MONTH); //获取设定时间 月份(5月)
//month =5
dealYm 日期处理方法
将传入的 文本类型的日期或 日期类型日期转换为 Date 输出
private Date dealYm(final String ym, final Date ymDate, final boolean monthEnd) {
int year = 0;
int month = 0;
if (ymDate != null) {
year = ymDate.getYear() + 1900;
month = ymDate.getMonth() + 1;
} else {
if (StringUtil.isEmptyString(ym)) {
return null;
}
if (ym.length() < 5) {
return null;
}
year = Integer.parseInt(ym.substring(0, 4));
String tmpMonth = ym.substring(4);
if (tmpMonth.charAt(0) > '9' || tmpMonth.charAt(0) < '0') {
tmpMonth = tmpMonth.substring(1);
}
if (tmpMonth.indexOf("/") > -1) {
tmpMonth = tmpMonth.substring(0, tmpMonth.indexOf("/"));
} else if (tmpMonth.indexOf("-") > -1) {
tmpMonth = tmpMonth.substring(0, tmpMonth.indexOf("-"));
} else if (tmpMonth.length() > 2){
tmpMonth = tmpMonth.substring(0, 2);
}
month = Integer.parseInt(tmpMonth);
}
try {
Calendar cd = Calendar.getInstance();
cd.set(Calendar.YEAR, year);
cd.set(Calendar.DAY_OF_MONTH, 1);
if (monthEnd) {
cd.set(Calendar.MONTH, month);
cd.add(Calendar.DAY_OF_MONTH,-1);
} else {
cd.set(Calendar.MONTH, month - 1);
}
//仅存储日期,防止数据库中存储时间
return DateUtil.format(DateUtil.format(cd.getTime(), "yyyy-MM-dd"), "yyyy-MM-dd");
}
catch (Exception e) {
return null;
}
}
Date类
1.概念:Date类是我们常用的一个日期和时间的对象,此类在 java.util 包中,并不是java.sql中的Date
2.创建日期对象
Date date = new Date();
Date date = new Date(System.currentTimeMillis()); //获取当前时间转换为毫秒数
3.常用方法
date.getYear()+1900; //获取当前年份 必须加上1900
date.getMonth()+1; //获取当前月份 从0-11,所以必须加1
date.getDate(); //获取当前日,1-31
date.toString(); //转换为String
date.toGMTString(); //转换为GMT时区
date.toLocaleString(); //转换为本地时区
Calendar类
1.概念:日历类Calendar更多的是代表年 月 日 周 星期 上午 下午 夏时令等这样内容,Date用于记录某一个含日期的、精确到毫秒的时间。重点在代表一刹那的时间本身
2.创建
Calendar calendar = Calendar.getInstance();
3.常用方法
Date date = calendar.getTime(); //获取一个Date的实例
calendar.get(Calendar.YEAR); //获取当前的年份
calendar.get(Calendar.MONTH)+1; //获取当前的月份
calendar.get(Calendar.DAY_OF_MONTH); //获取日
calendar.get(Calendar.HOUR_OF_DAY); //获取时
calendar.get(Calendar.MINUTE); //获取分
calendar.get(Calendar.SECOND); //获取秒
SimpleDateFormat类
1.概念:格式化输出日期,此类提供了一些预定义字符串或者称之为占位符
yyyy:年 MM:月 dd: 日 HH: 小时 mm: 分钟 ss: 秒
2.创建
//获取当前时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
sdf.format(date); //将当前时间输出格式转换为yyyy年MM月dd日 HH:mm:ss
新增的日期时间类LocalDate LocalTime LocalDateTime
1.LocalDate类-本地日期类
LocalDate d = LocalDate.now(); //当前日期
2.LocalTime类-本地时间类
LocalTime t = LocalTime.now(); //当前时间
3.LocalDateTime类-本地日期时间类
LocalDateTime dt = LocalDateTime.now();
-------------另一种写法(更规范)----------------
LocalDateTime dt = LocalDateTime.now(); //当前日期和时间
LocalDate d = dt.toLocalDate(); //转换到当前日期
LocalTime t = dt.toLocalTime(); //转换到当前时间
4.获取年月日时分秒的用法:
dt.getYear(); //年
dt.getMonth(); //月
dt.getDayOfMonth(); //一个月中的第几天
dt.getDayOfWeek(); //一周中的星期几
dt.getDayOfYear(); //一年的第几天
dt.getHour(); //小时
dt.getMinute(); //分钟
dt.getSecond(); //秒
5.根据指定的日期时间创建对象的用法
LocalDate date = LocalDate.of(2020,03,31); //2020-03-31
LocalTime time = LocalTime.of(16,57,50); //16:57:50
LocalDateTime datetime = LocalDateTime.of(2020,03,31,16,57,50)
LocalDateTime datetime2 = LocalDateTime.of(date,time);
6.根据标准格式创建对象的用法
ISO 8601规定的日期和时间格式:
日期:yyyy-MM-dd
时间:HH:mm:ss
带毫秒的时间:HH:mm:ss.SSS
日期和时间:yyyy-MM-dd'T'HH:mm:ss
带毫秒的日期和时间:yyyy-MM-dd'T'HH:mm:ss.SSS
LocalDateTime datetime = LocalDateTime.parse("2020-03-31T15:16:17")
LocalDate date = LocalDate.parse("2020-03-31");
LocalTime time = LocalTime.parse("15:16:17");
7.新增的日期时间格式化类 DateTimeFormatter类
①概念:如果要自定义输出的格式,或者要把一个非ISO 8601格式的字符串解析成LocalDateTime,可以使用新的DateTimeFormatter
②使用
//自定义格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
dtf.format(LocalDateTime.now());
//用自定义格式解析
LocalDateTime dt2 = LocalDateTime.parse("2020/03/31 15:16:17",dtf);