calendar类常用方法_设计一个日期类date

calendar类常用方法_设计一个日期类date常量字段Calendar类的常量字段是非常重要的参数,在set()、add()、get()方法中都会用到。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

常量字段

Calendar类的常量字段是非常重要的参数,在set()、add()、get()方法中都会用到。

Calendar类中常用的常量字段如下:

常量字段 说明
Calendar.ERA ERA表示纪元,只能为0或1。0表示BC(“before Christ”,即公元前);1表示AD(拉丁语“Anno Domini”,即公元)。
Calendar.YEAR 表示年份
Calendar.MONTH 表示月份,需要加1,因为0表示1月,1表示2月,以此类推
Calendar.HOUR 小时(12小时制)
Calendar.HOUR_OF_DAY 一天中第几个小时(24小时制)
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.MILLISECOND 毫秒
Calendar.DAY_OF_YEAR 一年中第几天
DAY_OF_MONTH 一月中第几天
DAY_OF_WEEK 一周中第几天,注意,周日是1,周一是2,…
Calendar.DATE 一月中第几天,同DAY_OF_MONTH的值是一样的
Calendar.DAY_OF_WEEK_IN_MONTH 当月内一周中的某天的序号
Calendar.WEEK_OF_YEAR 一年中的星期数,即本年中第几个星期
Calendar.WEEK_OF_MONTH 当前月中的星期数,即本月中第几个星期
Calendar.DAY_OF_WEEK_IN_MONTH 当前月中的第几个星期
Calendar.AM_PM AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1
Calendar.JANUARY 1月
Calendar.FEBRUARY 2月
Calendar.MARCH 3月
Calendar.APRIL 4月
Calendar.MAY 5月
Calendar.JUNE 6月
Calendar.JULY 7月
Calendar.AUGUST 8月
Calendar.SEPTEMBER 9月
Calendar.OCTOBER 10月
Calendar.NOVEMBER 11月
Calendar.DECEMBER 12月

获取Calendar对象

不需要通过new来创建Calendar对象,而是通过Calendar类的getInstance()静态方法。代码如下:

// 获取日历对象
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());// 将Date对象设置到Calendar对象中

常用方法

常用方法就是get、set和add方法,它们的API说明如下:

方法 说明
int get(int field) 用于获取日历字段的值,返回值是int类型,其中field参数的值可以是Calendar.YEARCalendar.MONTH等常量字段。
void set(int field, int value) 将给定的日历字段设置为指定的值。
void set(int year, int month, int date) 设置Calendar中的年、月、日字段
void set(int year, int month, int date, int hourOfDay, int minute) 设置Calendar中的年、月、日、时、分字段
void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置Calendar中的年、月、日、时、分、秒字段
void add(int field, int amount) 可以对指定的一个日历字段进行整数的偏移,比如在今年的日期基础上加上一年,就是明年这个时候的日期。其中amount可以为负数,可以表示如去年、上个月等。

其他方法

方法 说明
boolean after(Object when) 使用例如:c4.after(c3),判断c4的日期是否在c3的日期之后。传入的参数必须是Calendar对象。
boolean before(Object when) 使用例如:c3.before(c4),判断c3的日期是否在c4的日期之前。传入的参数必须是Calendar对象。
boolean equals(Object obj) 使用例如:c3.equals(c4),判断c3的日期是否等于c4所表示的日期。传入的参数必须是Calendar对象。
int compareTo(Calendar anotherCalendar) 使用例如:c3.compareTo(c4),如果比较c3和c4,如果c3<c4则返回-1,如果c3==c4则返回0,c3>c4则返回1。
int getActualMaximum(int field) 返回指定日历字段可能具有的最大值,例如:c5.getActualMaximum(Calendar.DAY_OF_MONTH),获取本月最后一天的号数。
int getActualMinimum(int field) 返回指定日历字段可能具有的最小值,例如:c5.getActualMinimum(Calendar.DAY_OF_MONTH),获取本月第一天的号数。
long getTimeInMillis() 返回此日历对象所表示的毫秒值。
int getFirstDayOfWeek() 获取一周的第一天是什么。
TimeZone getTimeZone() 获取时区。

Calendar对象与Date对象的相互转换

  • Date对象转换成Calendar对象
// Date对象转换成Calendar对象
Calendar c2 = Calendar.getInstance();
c2.setTime(new Date());
  • Calendar对象转换成Date对象
Calendar c2 = Calendar.getInstance();
// Calendar对象转换成Date对象
Date c2Date = c2.getTime();// 类似于new Date()

实例

Calendar类的实例代码如下:

public class CalendarTest {
    public static void main(String[] args) {
        // 获取日历对象
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());

        // 获取日期字段值
        System.out.println(calendar.get(Calendar.ERA));// 纪元,公元前还是公元
        System.out.println(calendar.get(Calendar.YEAR));// 年份
        System.out.println(calendar.get(Calendar.MONTH));// 月份,需要加1,因为0表示1月,1表示2月,以此类推
        System.out.println(calendar.get(Calendar.HOUR));// 小时(12小时制)
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));// 一天中第几个小时(24小时制)
        System.out.println(calendar.get(Calendar.MINUTE));// 分钟
        System.out.println(calendar.get(Calendar.SECOND));// 秒
        System.out.println(calendar.get(Calendar.MILLISECOND));// 毫秒
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 一年中第几天
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 一月中第几天
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));// 一周中第几天,注意,周日是1,周一是2,...
        System.out.println(calendar.get(Calendar.DATE));// 一月中第几天,同DAY_OF_MONTH的值是一样的
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));// 当月内一周中的某天的序号
        System.out.println("Calendar.WEEK_OF_YEAR=" + calendar.get(Calendar.WEEK_OF_YEAR));// 一年中的星期数,即本年中第几个星期
        System.out.println("Calendar.WEEK_OF_MONTH=" + calendar.get(Calendar.WEEK_OF_MONTH));// 当前月中的星期数,即本月中第几个星期
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));// 当前月中的第几个星期
        System.out.println("Calendar.AM_PM=" + calendar.get(Calendar.AM_PM));// AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1
        System.out.println(Calendar.JANUARY);// 1月
        System.out.println(Calendar.FEBRUARY);// 2月
        System.out.println(Calendar.MARCH);// 3月
        System.out.println(Calendar.APRIL);// 4月
        System.out.println(Calendar.MAY);// 5月
        System.out.println(Calendar.JUNE);// 6月
        System.out.println(Calendar.JULY);// 7月
        System.out.println(Calendar.AUGUST);// 8月
        System.out.println(Calendar.SEPTEMBER);// 9月
        System.out.println(Calendar.OCTOBER);// 10月
        System.out.println(Calendar.NOVEMBER);// 11月
        System.out.println(Calendar.DECEMBER);// 12月

        // 设置日期字段值
        calendar.set(2021, Calendar.JUNE, 3);// 设定指定年月日,其中Calendar.JUNE为5实际上是六月,所以0表示1月,1表示2月,以此类推
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
        calendar.set(2021, Calendar.FEBRUARY, 3, 23, 55);// 设置年月日时分
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
        calendar.set(2021, Calendar.MARCH, 3, 23, 55, 30);// 设置年月日时分秒
        calendar.set(Calendar.YEAR, 2005);// 单独设置日历字段,设置年份
        calendar.set(Calendar.MONTH, 7);// 单独设置日历字段,设置月份,注意0代表1月
        calendar.set(Calendar.DATE, 11);// 单独设置日历字段,设置天数
        calendar.set(Calendar.HOUR_OF_DAY, 22);// 单独设置日历字段,设置小时
        calendar.set(Calendar.MINUTE, 45);// 单独设置日历字段,设置分钟
        calendar.set(Calendar.SECOND, 30);// 单独设置日历字段,设置秒
        calendar.set(Calendar.MILLISECOND, 235);// 单独设置日历字段,设置毫秒
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));

        // 计算日期字段值,既可以为正数,又可以为负数
        calendar.add(Calendar.YEAR, 2);// 在当前日期的基础上添加年份,后年
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
        calendar.add(Calendar.YEAR, -1);// 在当前日期的基础上减去年份,昨年
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));
        calendar.add(Calendar.MONTH, 1);// 添加月份,下个月
        calendar.add(Calendar.MONTH, -1);// 添加月份,上个月
        calendar.add(Calendar.DATE, 2);// 添加天数,后天
        calendar.add(Calendar.DATE, -1);// 添加天数,昨天
        calendar.add(Calendar.HOUR_OF_DAY, 1);// 添加小时,下一个小时
        calendar.add(Calendar.HOUR_OF_DAY, -1);// 添加小时,上一个小时
        calendar.add(Calendar.MINUTE, 20);// 添加分钟,下20分钟
        calendar.add(Calendar.MINUTE, -20);// 添加分钟,上20分钟
        calendar.add(Calendar.SECOND, 30);// 添加秒数,下30秒
        calendar.add(Calendar.SECOND, -30);// 添加秒数,上30秒
        calendar.add(Calendar.DATE, 7);// 添加周数,即添加7天,下一周
        calendar.add(Calendar.DATE, -7);// 添加周数,上一周
        System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime()));

        // Calendar对象与Date对象的相互转换
        // Date对象转换成Calendar对象
        Calendar c2 = Calendar.getInstance();
        c2.setTime(new Date());
        // Calendar对象转换成Date对象
        Date c2Date = c2.getTime();// 类似于new Date()

        // 其他方法,如after、before
        Calendar c3 = Calendar.getInstance();
        c3.set(Calendar.YEAR, 2005);
        Calendar c4 = Calendar.getInstance();
        boolean after = c4.after(c3);// 判断c4的日期是否在c3之后
        System.out.println(after);
        boolean before = c3.before(c4);
        System.out.println(before);// 判断c3的日期是否在c4之前
        boolean equals = c3.equals(c4);// 判断c3的日期是否等于c4
        System.out.println(equals);
        int result = c3.compareTo(c4);// 如果比较c3和c4,如果c3<c4则返回-1,如果c3==c4则返回0,c3>c4则返回1
        System.out.println(result);

        Calendar c5 = Calendar.getInstance();
        c5.clear();
        c5.set(Calendar.YEAR, 2017);
        c5.set(Calendar.MONTH, 1);
        c5.set(Calendar.DAY_OF_MONTH, 30);
        System.out.println(c5.getTime());
        int lastDay = c5.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取本月最后一天的号数
        int firstDay = c5.getActualMinimum(Calendar.DAY_OF_MONTH);// 获取本月第一天的号数
        System.out.println("本月最后一天:" + lastDay + ", 本月第一天:" + firstDay);

        // 获取毫秒数
        long timeInMillis = calendar.getTimeInMillis();// 返回此Calendar的时间值,以毫秒为单位
        int firstDayOfWeek = calendar.getFirstDayOfWeek();// 获取一个星期中的第一天
        System.out.println(firstDayOfWeek);
        TimeZone timeZone = calendar.getTimeZone();// 获取时区
        System.out.println(timeZone.getDisplayName());
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190204.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 设备监控系统[通俗易懂]

    设备监控系统[通俗易懂]设备监控系统链接:https://www.zhihu.com/question/19973178/answer/75054424https://www.oneapm.com/http://ope

  • winform 自定义控件_adratator控件

    winform 自定义控件_adratator控件有很多时候,开发winform,系统给的控件往往不能满足需求,所以,

    2022年10月21日
  • SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit「建议收藏」

    SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit「建议收藏」使用SqlBulkCopy批量插入,可以快速对大批量的数量插入,性能非常好在使用时出现“来自数据源的String类型的给定值不能转换为指定目标列的类型bit”异常为DataTable与要插入的数据表字段位置不一样所至DataTable与要插入的数据表要字段名,位置,数据类型都一至才可示例,使用使用SqlBulkCopy插入多个表publicbo…

  • siamfc++代码_siacoin

    siamfc++代码_siacoinSiamFC++:TowardsRobustandAccurateVisualTrackingwithTargetEstimationGuidelines摘要。视觉跟踪问题要求对给定目标进行高效的鲁棒分类和精确的状态估计。以往的方法提出了多种目标状态估计方法,但很少有方法考虑到视觉跟踪问题本身的特殊性。在仔细分析的基础上,为高性能通用目标跟踪器的设计提供了一套实用的目标状态估计指导原则。遵循这些指导原则,我们通过引入分类和目标状态估计分支(G1)、无模糊性分类评分(G2)、无先验知识跟

  • Oracle INSERT INTO SELECT

    Oracle INSERT INTO SELECTINSERTINTOtarget_table(col1,col2,col3)SELECTcol1,col2,col3FROMsource_tableWHEREcondition;

  • mmse评估量表_简易精神状态评价量表(mmse量表) 打印版.doc[通俗易懂]

    简易精神状态评价量表(mmse量表)15016简易精神状态评价量表(MMSE)项目积分定向力(10分)1.今年是哪一年现在是什么季节?现在是几月份?今天是几号?今天是星期几?11111000002.你住在那个省?你住在那个县(区)?你住在那个乡(街道)?咱们现在在那个医院?咱们现在在第几层楼?1111100000记忆力(3分)3.告诉你三种东西,我说完后,请你重复一遍并记住,待会还会问你(各1分,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号