HIT-软件构造blog-Java Calendar类

一直以来有一种感受,就是日期类这个东西是个神奇的东西。我觉得各编程语言中的日期类都不是面向为了肝大作业的学生设计的。

在Lab3里,我只是想朴素地设置一个日期,忽略时间,但却比较麻烦。尤其是在实验要求的三个App中的一个里使用了经典的基于毫秒的时间,出现了各种舍入bug。

感觉Java Calendar类相对比较友善。它其实相当于一个表,存了很多字段,比如YEAR,存的是年份;MONTH,存的是月份。很多情况下(尤其是对于这种学生实验)比那种只能存一个毫秒数的方法好用很多。

我用到了这么几个方法:

方法功能
Date getTime()返回一个Date类型的时间值
void set(int year, int month, int date)设定字段YEAR,MONTH,DAY_OF_MONTH
void set(int field, int value)为指定的字段field设置给定值value
int get(int field)得到指定字段的值
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
void add(int field, int amount)为给定的日历字段 field 添加指定的时间量 amount

这个Calendar把日期和时间都转化为字段和值。而且巧妙在,在修改某一个字段的值后,仍能够维持日历的合法性。比如将DAY_OF_MONTH搞成40,那么日期不会变成这个月的第40天,而会变成下个月的第10天。这样,对使用者来说,完全不需要考虑日期格式、闰年闰月之类的复杂问题,将维护日期简单化。

需要注意的是,Calendar中的有些字段的值是从0开始的,有些是从1开始的。我**猜测 **其大概的逻辑是,固定取值空间从0开始(比如DAY_OF_WEEK只可能有7个取值,那么就是0-6);而可能有变化的空间从1开始(比如每个月的天数都不一样,那么就从1开始,到30或者31或者28或者29结束,具体取决于是哪个月)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值