Java旧版本的Calendar类使用小结

Java旧版本的Calendar类使用小结

 

 

 

在Java8以前,Java原生类库对于日期时间的处理基本上就是使用Date  和 Calendar 类及其衍生类;

java.util.Calendar 是一个抽象基类可以提取详细的日历信息,如年月日,小时分钟秒等,

Calendar的数值时距历元(即格林威治标准时间 1970年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。;

Calendar支持公历类 java.util.GregorianCalendar

java.util.Calendar 

 

+Calendar()
+get( field : int ) :int
set (field :int,Value:int ):void
+set(year:int ,month:int,dayOfMonth:int) :void
+getActualMaximum (field:int) :int

+add (field:int, amount:int):void
+compareTo(Calendar another)

+getTime() :java.util.Date
+setTime(date:java.util.Date)

○创建一个默认的日历
○ 返回给定日历域的值
○ 设置指定的日历的域
○ 用指定的年月日设置日历,月份参数基于0
○返回指定日历域的最大值

添加或提取给定时间量给指定的日历域
 比较时间值

○返回一个Date对象表示该日历的时间值
○使用指定的Date对象设置该日历的时间

 

java.util.GregorianCalendar

 

+GregorianCalendar()
+GregorianCalendar(year:int ,month:int ,dayOfMonth:int )
+GregorianCalendar(year:int ,month:int ,dayOfMonth:int   
,hour:int,minute:int,second:int)

○构造当前时间的公历对象
○构造指定年月日的公历对象
○构造指定年月日,小时分钟
秒的公历对象

 

Calendar类的域常量

 

YEAR
MONTH
DATE
HOUR
HOUR_OF_DAY
MINUTE
SECOND

DAY_OF_WEEK
DAY_OF_MONTH
DAY_OF_YEAR
WEEK_OF_MONTH
WEEK_OF_YEAR
AM_PM

日历的年份 1+
日历的月份  0+
日历的天  1+
日历的小时(12小时制)0+
日历的小时(24小时制)0+
日历的分钟 0+
日历的秒   0+

一周的天数,1表示周日
同Date   1+
当前年的总天数,1表示改年的第1天
当前月的总星期数,1是该月的第1周
当前年的总星期数  1+
表明是上午或下午(0-上午,1-下午)



 


2、基本使用 

   获取年份等:

          Calendar calendar= new GregorianCalendar();

          int year =calendar.get(Calendar.YEAR);

 

   为某个特定的日历域增加或减少指定的量:

         calendar.add(Calendar.DAY_OF_MONTH,5);

 

   获取某个月的天数

           Calendarcalendar = new GregorianCalendar();

          calendar.set(Calendar.MONTH,5);

          calendar.getActualMaxium(Calendar.MONTH_OF_DAY);

 


 

Calendar类常见的应用



1、Calendar和Date之间的相互转换:

①Calendar->Date

Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

②Date->Calendar

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

2、创建指定年月日的Date对象:

Date createSpecifyDate(int year,int month,int date[,int hour,int minute,int seconds]){
    Calendar cal = Calendar.getInstance();
    Calendar.set(year,month,date[,hour,minute,seconds]);
    Date date = cal.getTime();
    return date;
}

3、获取指定月份的最大天数

int getMaxDayOfMonth(int year,int month){
     Calendar cal = new GregorianCalendar(year,month,1);
     return  cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}

4、获取Calendar的当前年 每个单位常量的总值

Calendar cal = Calendar.getInstance();

int total_months = cal.get(Calendar.MONTH);
int total_weeks = cal.get(Calendar.WEEK_OF_YEAR);
int total_days = cal.get(Calendar.DAY_OF_YEAR);

int total_hours = cal.get(Calendar.DAY_OF_YEAR) * 24;
int total_minutes = cal.get(Calendar.DAY_OF_YEAR) * 24 * 60 ;
int total_seconds = cal.get(Calendar.DAY_OF_YEAR) * 24 * 60 * 60;


5、计算两个Calendar时间量之间的时间差

 

void duration(Calendar cal1,Calendar cal2){
long durationMills = cal2.getTimeInMillis() - cal1.getTimeInMilis();
//return total_second
int duration_seconds = (int)durationMills / 1000;

//return total_minute
int total_minutes = (int)durationMills / (1000 * 60);

//retrun total_hour
int total_hours = (int)durationMillis /(1000 * 60 *60);

//return total_day
int total_days = (int)durationMillis /(1000 * 60 * 60 * 24);

//return total_week
int total_weeks = (int)durationMillis/(1000 *60 * 60 *24 *7);
//return total_month
Calendar calTemp =  Calendar.getInstance();
calTemp.setTimeInMillis(durationMillis);
int total_months = get(Calendar.WEEK_OF_YEAR);
//return total_year
int total_years = cal2.get(Calendar.YEAR)  - cal1.get(Calendar.YEAR);
}

两个Date对象计算时间差,可以将Date装载入Calendar对象中,在进行运算;

指定数值的两组时间值计算时间差,可p以将这两组时间值装载如Calendar对象中,在进行运算;

 

 也可以考虑使用Java8的Duration和Period类

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值