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();
}
}
georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,georgedatacenter是一家成立于2019年的美国VPS商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacenter的VPS采用KVM和VMware虚拟化,可以选择windows...
在之前几个月中也有陆续提到两次HostYun主机商,这个商家前身是我们可能有些网友熟悉的主机分享团队的,后来改名称的。目前这个品牌主营低价便宜VPS主机,这次有可以看到推出廉价版本的美国CN2 GIA VPS主机,月费地址15元,适合有需要入门级且需要便宜的用户。第一、廉价版美国CN2 GIA VPS主机方案我们可看到这个类型的VPS目前三网都走CN2 GIA网络,而且是原生IP。根据信息可能后续...
触摸云触摸云(cmzi.com),国人商家,有IDC/ISP正规资质,主营香港线路VPS、物理机等产品。本次为大家带上的是美国高防2区的套餐。去程普通线路,回程cn2 gia,均衡防御速度与防御,防御值为200G,无视UDP攻击,可选择性是否开启CC防御策略,超过峰值黑洞1-2小时。最低套餐20M起,多数套餐为50M,适合有防御型建站需求使用。美国高防2区 弹性云[大宽带]· 配置:1-16核· ...
javacalendar为你推荐
时间刻度excel横坐标中时间刻度如何设置成整点?各大网站有没有很好玩的网站啊shoujiao如何区分是不是颈椎病?sms是什么短信确认码是什么za是哪个国家的ci是在哪个国家产生的?哪个国家开始流行的淘码除了爱码,现在哪个验证码平台还能用怎么查微信注册时间怎么查看自己的微信号用了多久camel是什么意思“压垮骆驼的最后一根稻草”是什么意思?测试post软件测试的测试工作有哪些重要的步骤455端口sangfor防火墙如何禁用455端口
已经备案域名 免费cn域名 vultr美国与日本 mediafire php主机 青果网 php免费空间 免费活动 卡巴斯基免费试用 789 东莞服务器托管 免费php空间 时间服务器 asp.net虚拟主机 pptpvpn 游戏服务器 压力测试工具 tracert qq部落18-3 腾讯qq空间登录首页 更多