javacalendar求java中Calendar类的用法例子(并附每条注释)
javacalendar 时间:2021-06-26 阅读:(
)
做一个JAVA日历
你使用java.util.Calendar吧,可以加减年、月、天等操作,你要连续的几个月,那只要连续加一个月,得到一个新的date。
然后用你写好的输出数组的方法运算就可以了。
这只是思路,还是需要你调整一下的。
关于java.util.Calendar的一点儿疑惑,请高手作答。
Calendar.THURSDAY
Calendar.DAY_OF_MONTH
Calendar.JUNE
这三个确实都是5,调用返回的结果也肯定跟直接调用cal.get(5)一样,这是因为:
public int get(int field)
返回给定日历字段的值。
field - 给定的日历字段。
Calendar.THURSDAY和Calendar.JUNE这两个根本不是字段,是字段的值,换句话说,
Calendar.THURSDAY的说明是指示 Thursday 的 DAY_OF_WEEK
字段值。
也就是你调用cal.get(Calendar.DAY_OF_WEEK)可能会返回这个值。
总之,调用cal.get(Calendar.THURSDAY)和cal.get(Calendar.JUNE)是没有意义的,返回的都是cal.get(Calendar.DAY_OF_MONTH)
可以把Calendar看做是一个日期,你只会说我想获得这个日期是哪年、哪月、哪日、周几等。
比如你问Calendar是周几,它会回答你一个数值,而java是这么设计的,从1-7代表周日到周一,因为这个方法返回的是int类型。
而5代表周四,所以就定义了一个常量THURSDAY=5.
实际你传入Calendar.THURSDAY从某种意义上讲是不合法的,只不过他的值恰巧与Calendar.DAY_OF_WEEK相同而已。
java calendar 时间
1、计算某一月份的最大天数
Calendar?time=Calendar.getInstance();?
time.clear();?
time.set(Calendar.YEAR,year);?
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0????????????
intday=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间。
2、Calendar和Date的转化
(1) Calendar转化为Date
Calendar?cal=Calendar.getInstance();
Date?date=cal.getTime();(2) Date转化为Calendar
Date?date=new?Date();
Calendar?cal=Calendar.getInstance();
cal.setTime(date);3、格式化输出日期时间
Date?date=new?Date();
SimpleDateFormat?df=new?SimpleDateFormat("yyyy-MM-dd?hh:mm:ss");
System.out.println(df.format(date));4、计算一年中的第几星期
(1)计算某一天是一年中的第几星期
Calendar?cal=Calendar.getInstance();
cal.set(Calendar.YEAR,?2006);
cal.set(Calendar.MONTH,?8);
cal.set(Calendar.DAY_OF_MONTH,?3);
int?weekno=cal.get(Calendar.WEEK_OF_YEAR);(2)计算一年中的第几星期是几号
SimpleDateFormat?df=new?SimpleDateFormat("yyyy-MM-dd");
Calendar?cal=Calendar.getInstance();
cal.set(Calendar.YEAR,?2006);
cal.set(Calendar.WEEK_OF_YEAR,?1);
cal.set(Calendar.DAY_OF_WEEK,?Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));求java中Calendar类的用法例子(并附每条注释)
Calendar类(理解)
Calendar类是采用手工的方式取得日期,可以通过此类精确到毫秒,此类的定义如下:
public abstract class Calendar extends Object
implements Serializable, Cloneable, Comparable
这个类本身是一个抽象类,抽象类要想实例化肯定使用子类:GregorianCalendar
.lxh.api.datedemo;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar();
System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
System.out.println("MONTH: " + (calendar.get(Calendar.MONTH) + 1));
System.out.println("DATE: " + calendar.get(Calendar.DATE));
System.out
.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
System.out
.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
}
}
但是现在有一个问题,如果每次取时间都按照这种方式取的话,那么得累死,那么能不能设计一个类,可以通过此
类直接取得时间呢,例如:现在给出了如下的一个接口:
.lxh.api.datedemo;
public interface DateTime {
/**
*取得日期
* @return 日期的字符串,例如:2009-12-22
*/
public String getDate() ;
/**
*取得日期时间
* @return 日期时间的字符串,例如:2009-12-22 11:06:23.345
*/
public String getDateTime() ;
/**
*取得时间戳
* @return 返回时间戳的字符串,例如:20091222110623345
*/
public String getTimeStamp() ;
}
前面需要补0的问题需要注意,例如:01。
.lxh.api.datedemo;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DateTimeImpl implements DateTime {
private Calendar calendar;
public DateTimeImpl() {
this.calendar = new GregorianCalendar();
}
public String getDate() {
StringBuffer buf = new StringBuffer();
buf.append(calendar.get(Calendar.YEAR)).append("-");
buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");
buf.append(this.addZero(calendar.get(Calendar.DATE), 2));
return buf.toString();
}
public String getDateTime() {
StringBuffer buf = new StringBuffer();
buf.append(calendar.get(Calendar.YEAR)).append("-");
buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");
buf.append(this.addZero(calendar.get(Calendar.DATE), 2)).append(" ");
buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(":") ;
buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)).append(":") ;
buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)).append(".") ;
buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;
return buf.toString();
}
@Override
public String getTimeStamp() {
StringBuffer buf = new StringBuffer();
buf.append(calendar.get(Calendar.YEAR));
buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2));
buf.append(this.addZero(calendar.get(Calendar.DATE), 2));
buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2));
buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)) ;
buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)) ;
buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;
return buf.toString();
}
private String addZero(int num, int len) {
StringBuffer buf = new StringBuffer();
buf.append(num);
while (buf.length() < len) {
buf.insert(0, 0);
}
return buf.toString();
}
}
前几天还在和做外贸业务的网友聊着有哪些欧洲机房的云服务器、VPS商家值得选择的。其中介绍他选择的还是我们熟悉的Vultr VPS服务商,拥有比较多达到17个数据中心,这不今天在登录VULTR商家的时候看到消息又新增一个新的机房。这算是第18个数据中心,也是欧洲VPS主机,地区是瑞典斯德哥尔摩。如果我们有需要欧洲机房的朋友现在就可以看到开通的机房中有可以选择瑞典机房。目前欧洲已经有五个机房可以选择,...
有在六月份的时候也有分享过新网域名注册商发布的域名促销活动(这里)。这不在九月份发布秋季域名促销活动,有提供年付16元的.COM域名,同时还有5个+的特殊后缀的域名是免费的。对于新网服务商是曾经非常老牌的域名注册商,早年也是有在他们家注册域名的。我们可以看到,如果有针对新用户的可以领到16元的.COM域名。包括还有首年免费的.XYZ、.SHOP、Space等等后缀的域名。除了.COM域名之外的其他...
wordpress高级全行业大气外贸主题,wordpress通用全行业高级外贸企业在线询单自适应主题建站程序,完善的外贸企业建站功能模块 + 高效通用的后台自定义设置,更实用的移动设备特色功能模块 + 更适于欧美国外用户操作体验 大气简洁的网站风格设计 + 高效优化的网站程序结构,更利于Goolge等SEO搜索优化和站点收录排名。点击进入:wordpress高级全行业大气外贸主题主题价格:¥398...
javacalendar为你推荐
c语言论坛求C语言学习的论坛,或者网站,谢谢activity跳转android中从一个activity跳转到另一个activity的详细步骤离线包高德地图离线包使用后会省流量吗网络视频下载器谁能给我找个网络视频下载器和转换器?上行宽带上行宽带是什么?qq管家官网腾讯手机管家如何下载QQ手机管家?java程序员招聘java工程师待遇如何网络安全密钥网络安全密钥一般是什么网络安全密钥一般路由器是网络安全密钥是多少particular教程AE的particular的particle设置
如何查询域名备案号 google镜像 virpus awardspace 精品网 idc评测网 美国便宜货网站 好看的桌面背景大图 2017年万圣节 私有云存储 网通ip 蜗牛魔方 40g硬盘 刀片式服务器 亚马逊香港官网 qq对话框 中国电信宽带测速网 网游服务器 申请网页 美国独立日 更多