前言:
對于新手程序員的我來說,寫業務代碼是現在的日常,在此過程中經常需要對日期時間進行處理,我挑了幾個較有用的日期處理函數分享給大家。
正文:
1、將某格式的時間字符串轉化成毫秒時間戳表示的字符串:
public static String dateTimeStrToMills(String dateTime,String format){
String dateStr = null;
SimpleDateFormat sdf = new SimpleDateFormat(format);
Calendar calendar = Calendar.getInstance();
calendar.clear();
try {
Date d = new Date();
d = sdf.parse(dateTime);
calendar.setTime(d);
dateStr = calendar.getTimeInMillis()+"ms";
} catch (ParseException e) {
e.printStackTrace();
}
return dateStr;
}
測試例:
@Test
public void test1(){
String date = "2018-10-10 08:30:00";
String format = "yyyy-MM-dd HH:mm:ss";
String timeMS = DateTimeUtils.dateTimeStrToMills(date,format);
System.out.println("毫秒時間:" + timeMS);//毫秒時間:1539131400000ms
}
2、獲取某個月的天數:
public static int getDayNumOfMonth(int year,int month){
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month,0);
return calendar.get(Calendar.DAY_OF_MONTH);
}
測試例:
@Test
public void test2(){
int year = 2018;
int month = 10;
int dayNum = DateTimeUtils.getDayNumOfMonth(year,month);
System.out.println("dayNum:" + dayNum);//dayNum:31
}
3、獲取某日、月、年前后的日期:
public static String getBeforeOrAfterDateType(int num,String date,String format,int timeType){
SimpleDateFormat sdf = new SimpleDateFormat(format);
String resultDate = "";
Calendar calendar = Calendar.getInstance();
calendar.clear();
try {
Date d = new Date();
d = sdf.parse(date);
calendar.setTime(d);
calendar.add(timeType, num);//一天的結束是第二天的開始
resultDate = sdf.format(calendar.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultDate;
}
測試例:
@Test
public void test3(){
//獲取某個月前面一個月
int num = -1;
String date = "2018-10";
String format = "yyyy-MM";
int timeType = Calendar.MONTH;
String resultDate = DateTimeUtils.getBeforeOrAfterDateType(num,date,format,timeType);
System.out.println("resultDate:" + resultDate);//resultDate:2018-09
//獲取某天幾天后的日期
num = 3;
date = "2018-10-05";
format = "yyyy-MM-dd";
timeType = Calendar.DAY_OF_MONTH;
resultDate = DateTimeUtils.getBeforeOrAfterDateType(num,date,format,timeType);
System.out.println("resultDate:" + resultDate);//resultDate:2018-10-08
}
4、根據毫秒時間戳獲得格式化后的日期:
public static String millisecondToDate(Long millisecond,String dateFormat){
Date date = new Date(millisecond);
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
String sb = format.format(gc.getTime());
return sb;
}
測試例:
@Test
public void test4(){
long mill = 1539131400000l;
String format = "yyyy-MM-dd HH:mm:ss";
String date = DateTimeUtils.millisecondToDate(mill,format);
System.out.println("date:" + date);//date:2018-10-10 08:30:00
}
5、獲取某月第一天:
public static String getFirstDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, firstDay);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String firstDayOfMonth = sdf.format(cal.getTime());
return firstDayOfMonth;
}
測試例:
@Test
public void test5(){
int year = 2018;
int month = 11;
String format = "yyyy-MM-dd";
String date = DateTimeUtils.getFirstDayOfMonth(year,month,format);
System.out.println("date:" + date);//date:2018-11-01
}
6、獲取某月最后一天:
public static String getLastDayOfMonth(int year,int month,String format){
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
int lastDay = 0;
lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
SimpleDateFormat sdf = new SimpleDateFormat(format);
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
測試例:
@Test
public void test6(){
int year = 2018;
int month = 11;
String format = "yyyy-MM-dd";
String date = DateTimeUtils.getLastDayOfMonth(year,month,format);
System.out.println("date:" + date);//date:2018-11-30
}
7、獲取起止日期之間的所有字符串(可自定義間隔、格式、日期類型):
public static ListgetDatesBetweenTwoDate(String begin,String end,int num,int timeType,String format){
ListlDates;
lDates = new ArrayList<>();
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date beginDate = sdf.parse(begin);
Date endDate = sdf.parse(end);
lDates.add(sdf.format(beginDate));
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
boolean bContinue = true;
while(bContinue){
calendar.add(timeType, num);
if(endDate.after(calendar.getTime())){
lDates.add(sdf.format(calendar.getTime()));
}else{
break;
}
}
lDates.add(sdf.format(endDate));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return lDates;
}
測試例:
@Test
public void test7(){
String startDate = "2018-10-10";
String endDate = "2018-10-15";
String format = "yyyy-MM-dd";
int num = 1;
int timeType = Calendar.DAY_OF_MONTH;
ListtimeList = DateTimeUtils.getDatesBetweenTwoDate(startDate,endDate,num,timeType,format);
System.out.println(timeList.toString());
//[2018-10-10, 2018-10-11, 2018-10-12, 2018-10-13, 2018-10-14, 2018-10-15]
}