Calendar实例化的方式以及处理时间的工具类

本文介绍了一种利用Java中的Calendar类进行日期时间操作的方法,包括如何获取指定日期的开始和结束时间、如何获取一周或一个月的起始与结束时间等实用功能。此外,还提供了一系列日期格式化和转换的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.Calendar实例化的方式

 首先Calendar是一个抽象类,不能直接实例化,Java提供了静态工厂方法getInstance()来实例化Calendar,

或者通过它的子类来实例化

Calendar c=new GregorianCalendar();//直接创建
Calendar c=Calendar.getInstance();//工厂方法

@通过静态工厂方法实例化Calendar对象





package com.brc.util;


import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class DateUtil {


// 获取当天的开始时间
public static Date getDayBegin(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}


// 获取当天的结束时间
public static Date getDayEnd(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}


// 获取本周的开始时间
public static Date getBeginDayOfWeek(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek);
return getDayStartTime(cal.getTime());
}


// 获取本周的结束时间
public static Date getEndDayOfWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.setTime(getBeginDayOfWeek(date));
cal.add(Calendar.DAY_OF_WEEK, 6);
Date weekEndSta = cal.getTime();
return getDayEndTime(weekEndSta);
}


// 获取本月的开始时间
public static Date getBeginDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(getNowYear(date), getNowMonth(date) - 1, 1);
return getDayStartTime(calendar.getTime());
}


// 获取本月的结束时间
public static Date getEndDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(getNowYear(date), getNowMonth(date) - 1, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(date), getNowMonth(date) - 1, day);
return getDayEndTime(calendar.getTime());
}


// 获取本月是哪一月
public static int getNowMonth(Date date) {
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return gc.get(2) + 1;
}


// 获取今年是哪一年
public static Integer getNowYear(Date date) {
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}


// 获取某个日期的开始时间
public static Date getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d) {
calendar.setTime(d);
}
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}


// 获取某个日期的结束时间
public static Date getDayEndTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d) {
calendar.setTime(d);
}
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}


/**
* 获取某年某个月开始日期-结束日期
* lin
* @param dayCount
* @return
*/
public static String getBeginDayOfMonth(int year, int month) {  
        YearMonth yearMonth = YearMonth.of(year, month);  
        LocalDate localDate = yearMonth.atDay(1);  
        LocalDateTime startOfDay = localDate.atStartOfDay();  
        ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));  
  
        return dateToStr(Date.from(zonedDateTime.toInstant()));  
    }  
  
    public static String getEndOfMonth(int year, int month) {  
        YearMonth yearMonth = YearMonth.of(year, month);  
        LocalDate endOfMonth = yearMonth.atEndOfMonth();  
        LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);  
        ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));  
        return dateToStr(Date.from(zonedDateTime.toInstant()));  
    }  

/**
* 获取某个日期 后面几天
* lin
* @param dayCount
* @return
*/


public static Date getDayEndForCount(Integer dayCount) {
Calendar calendar = Calendar.getInstance();
if (0 == dayCount) {
return new Date();
}
calendar.add(Calendar.DATE, dayCount);
return calendar.getTime();
}
/**
* 获取某个日期 后面几天
* lin
* @param dayCount
* @return
*/
public static String getStrDayEndForCount(Integer dayCount) {
Calendar calendar = Calendar.getInstance();
if (0==dayCount) {
return dateToStrLong(new Date());
}
calendar.add(Calendar.DATE, dayCount);
return dateToStrLong(calendar.getTime());
}



/** 
* 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss 
*  lin
* @param strDate 
* @return 
*/  
public static Date strToDateLong(String strDate) {  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    ParsePosition pos = new ParsePosition(0);  
    Date strtodate = formatter.parse(strDate, pos);  
    return strtodate;  
}  
  
/** 
* 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss 
*  lin
* @param dateDate 
* @return 
*/  
public static String dateToStrLong(java.util.Date dateDate) {  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    String dateString = formatter.format(dateDate);  
    return dateString;  
}  
  
/** 
* 将短时间格式时间转换为字符串 yyyy-MM-dd 
*  lin
* @param dateDate 
* @param k 
* @return 
*/  
public static String dateToStr(java.util.Date dateDate) {  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  
    String dateString = formatter.format(dateDate);  
    return dateString;  
}  
/** 
* 将短时间格式时间转换为字符串 yyyy-MM
*  lin
* @param dateDate 
* @param k 
* @return 
*/  
public static String dateToStrMm(java.util.Date dateDate) {  
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");  
String dateString = formatter.format(dateDate);  
return dateString;  
}  
  
/** 
* 将短时间格式字符串转换为时间 yyyy-MM-dd 
*  lin
* @param strDate 
* @return 
*/  
public static Date strToDate(String strDate) {  
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  
    ParsePosition pos = new ParsePosition(0);  
    Date strtodate = formatter.parse(strDate, pos);  
    return strtodate;  
}  
public static String formate(Date date, String parten) {
SimpleDateFormat format = new SimpleDateFormat(parten);
return format.format(date);
}


public static void main(String[] args) {
System.err.println(DateUtil.dateToStrMm(new Date()));
}


/**
*
* @param date
* @return
*/
public static Date setDate(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
calendar2.set(Calendar.YEAR, calendar1.get(Calendar.YEAR));
calendar2.set(Calendar.MONTH, calendar1.get(Calendar.MONTH));
calendar2.set(Calendar.DAY_OF_MONTH, calendar1.get(Calendar.DAY_OF_MONTH));
return calendar2.getTime();
}


获取输入时间的当月的日历

  1. public static void main(String[] args) throws ParseException {  
  2.         String  str = "2015-9-22";  
  3.         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  4.           
  5.         Date date = df.parse(str);  //从字符串中解析出日期  
  6.         Calendar calendar = new GregorianCalendar();  //实例化一个格林尼治日历  
  7.           
  8.         //把Date转化为Calendar再进行处理  
  9.         calendar.setTime(date);  
  10.         int today = calendar.get(Calendar.DATE);  //获得日数,注意不要用DATE类,已废弃       
  11.           
  12.         //把日期设为当月的第一天  
  13.         calendar.set(Calendar.DATE, 1);  
  14.         int firstDay = calendar.get(Calendar.DAY_OF_WEEK); //获得某一天是一周的星期几  
  15.         int lastDay = calendar.getActualMaximum(Calendar.DATE); //获得某一月最多有几天  
  16.           
  17.         System.out.println("日\t一\t二\t三\t四\t五\t六");  
  18.         for(int i = 1; i<firstDay; i++) System.out.print("\t");  
  19.         for(int i = 1; i<=lastDay; i++) {  
  20.             if(i == today) {  
  21.                 System.out.print("*");  
  22.             }  
  23.             System.out.print(i + "\t");  
  24.             if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)   
  25.                 System.out.println();  
  26.             calendar.add(Calendar.DATE, 1);  //日期的日数加1  
  27.         }  
  28.     }  


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值