1.获取最近30天List
//'main' method must be in a class 'Rextester'.
//Compiler version 1.8.0_111
import java.util.*;
import java.lang.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Rextester
{
public static void main(String args[])
{
List<String> dayList= getThisYearMonthDays();
System.out.println(dayList.toString());
}
/**
* 生成前30的日期
* @return
*/
public static List<String> getThisYearMonthDays(){
int monthDays=30;//近30天
//建一个容器
List<String> listEveryDay= new ArrayList<String>();
//获取日历对象
Calendar calendar=Calendar.getInstance();
//规定时间格式
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
//声明时间
Date date=new Date();
for(int i=0; i<monthDays;i++){
calendar.setTime(date);//设置为当前时间
calendar.add(calendar.DATE,-i);//每循环一次减一天
String everyDate=dateFormat.format(calendar.getTime());//将date转为字符串
listEveryDay.add(everyDate);//向list集合中添加
}
Collections.sort(listEveryDay);//排序
return listEveryDay;
}
}
结果:
2.获取最近一年的月份(最近12个月)
//'main' method must be in a class 'Rextester'.
//Compiler version 1.8.0_111
import java.util.*;
import java.lang.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Rextester
{
public static void main(String args[])
{
List<String> monthList= getThisYearMonths();
System.out.println(monthList.toString());
}
/***
* 获取最近一年的月份
* @return
*/
public static List<String> getThisYearMonths(){
//建一个容器
List<String> months=new ArrayList<>();
//获取日历对象
Calendar calendar = Calendar.getInstance();
//调整到12个月以前
calendar.add(Calendar.MONTH,-11);
//循环12次获取12个月份
for (int i = 0; i < 12; i++) {
//日历对象转为Date对象
Date date = calendar.getTime();
//将date转为字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String dateStr = sdf.format(date);
//向list集合中添加
months.add(dateStr);
//每次月份+1
calendar.add(Calendar.MONTH,1);
}
return months;
}
}
结果:
3.获取时间的方式、方法
//'main' method must be in a class 'Rextester'.
//Compiler version 1.8.0_111
import java.util.*;
import java.lang.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Rextester
{
public static void main(String args[])
{
//使用默认时区和语言环境获得一个日历。
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DATE);
int month = cal.get(Calendar.MONTH) + 1;//第一个月从0开始,所以得到月份+1
int year = cal.get(Calendar.YEAR);
int dow = cal.get(Calendar.DAY_OF_WEEK);
int dom = cal.get(Calendar.DAY_OF_MONTH);
int doy = cal.get(Calendar.DAY_OF_YEAR);
System.out.println("当期时间: " + cal.getTime());
System.out.println("日期: " + day);
System.out.println("月份: " + month);
System.out.println("年份: " + year);
System.out.println("一周的第几天: " + dow); // 星期日为一周的第一天输出为 1,星期一输出为 2,以此类推
System.out.println("一月中的第几天: " + dom);
System.out.println("一年的第几天: " + doy);
/*用Calendar的get(int field)方法返回给定日历字段的值。
HOUR 用于 12 小时制时钟 (0 - 11),HOUR_OF_DAY 用于 24 小时制时钟。*/
Integer hour12 = cal.get(Calendar.HOUR);
Integer hour24 = cal.get(Calendar.HOUR_OF_DAY);
Integer minute = cal.get(Calendar.MINUTE);
Integer second = cal.get(Calendar.SECOND);
Integer millisecond = cal.get(Calendar.MILLISECOND);
String TimeNow12 = year+"-"+month+"-"+day+" "+hour12+":"+minute+":"+second+":"+millisecond;
String TimeNow24 = year+"-"+month+"-"+day+" "+hour24+":"+minute+":"+second+":"+millisecond;
System.out.println("日历:"+cal.getTime()+"\n12小时制时钟:"+TimeNow12+"\n24小时制时钟:"+TimeNow24);
}
}
结果:
4.根据自定义起始时间获取不同类型的时间段
//'main' method must be in a class 'Rextester'.
//Compiler version 1.8.0_111
import java.util.*;
import java.lang.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
class Rextester
{
public static void main(String args[])
{
String startTime="2021-11-01";
String endTime="2022-01-02";
try{
Set daySet= getDateSet(startTime,endTime, 0);
System.out.println("天:\n"+daySet);//日 天
Set monthSet= getDateSet(startTime,endTime,1);
System.out.println("月:\n"+monthSet);//月
Set yearSet= getDateSet(startTime,endTime, 2);
System.out.println("年:\n"+yearSet);//年
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 根据起始时间生成时间段 day month year
* @param startTime 开始时间
* @param endTime 结束时间
* @param index 索引类型 0:日 1:月 2:年
* @return 返回时间段
*/
public static Set getDateSet(String startTime, String endTime, Integer index) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 将时间转换成时间戳
Long startTimestamp = sdf.parse(startTime).getTime();
Long endTimestamp = sdf.parse(endTime).getTime();
Set timeSet = new TreeSet();
//定义一个一天的时间戳时长
Long oneDay = 1000 * 60 * 60 * 24L;
Long time = startTimestamp;
switch (index){
case 0:
//循环得出
while (time <= endTimestamp) {
timeSet.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
time += oneDay;
}
case 1:
//循环得出
while (time <= endTimestamp) {
timeSet.add(new SimpleDateFormat("yyyy-MM").format(new Date(time)));
time += oneDay;
}
case 2:
//循环得出
while (time <= endTimestamp) {
timeSet.add(new SimpleDateFormat("yyyy").format(new Date(time)));
time += oneDay;
}
}
return timeSet;
}
}
结果: