随便给定一个年份,怎么推算父亲节是哪一天的日期 csdn

java(93)
1.java定时任务可以借助 java.util.Timer 来实现
import java.util.C
import java.util.D
import java.util.T
import java.util.TimerT
public class Test {
public static void main(String[] args) {
//timer1();
//timer3();
//timer4();
// 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
public static void timer1() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println(&-------设定要指定任务--------&);
}, 2000);// 设定指定的时间time,此处为2000毫秒
// 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行
// schedule(TimerTask task, long delay, long period)
public static void timer2() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println(&-------设定要指定任务--------&);
// 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。
// scheduleAtFixedRate(TimerTask task, long delay, long period)
public static void timer3() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println(&-------设定要指定任务--------&);
// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
// Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
public static void timer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
// 得出执行任务的时间,此处为今天的12:00:00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println(&-------设定要指定任务--------&);
}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
2. Java定时任务可以用线程的等待来实现
* 普通thread
* 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,
* 通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:
* @author GT
public class Task1 {
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println(&Hello !!&);
// ------- ends here
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
Thread thread = new Thread(runnable);
thread.start();
3.Java可以用java.util.concurrent.ScheduledExecutorService 来实现定时任务
import java.util.concurrent.E
import java.util.concurrent.ScheduledExecutorS
import java.util.concurrent.TimeU
* ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
* 相比于上两个方法,它有以下好处:
* 1&相比于Timer的单线程,它是通过线程池的方式来执行任务的
* 2&可以很灵活的去设定第一次执行任务delay时间
* 3&提供了良好的约定,以便设定执行的时间间隔
* 下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。
* @author GT
public class Task3 {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
// task to run goes here
System.out.println(&Hello !!&);
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
service.scheduleAtFixedRate(runnable, 10, 1, TimeUnit.SECONDS);
4.&定时任务之-Quartz使用篇
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的组件或
CronTrigger配置格式:
格式: [秒] [分] [小时] [日] [月] [周] [年]
允许填写的值
允许的通配符
, - * ? / L W
1-12 or JAN-DEC
1-7 or SUN-SAT
, - * ? / L #
通配符说明:
* 表示所有值. 例如:在分的字段上设置 &*&,表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为&?& 具体设置为 0 0 0 10*
- 表示区间。例如 在小时上设置 &10-12&,表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 &MON,WED,FRI& 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置&5/15& 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于&7&或&SAT&。如果在&L&前加上数字,则表示该数据的最后一个。例如在周字段上设置&6L&这样的格式,则表示“本月最后一个星期五&
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置&15W&,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为
&1W&,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,&W&前只能设置具体的数字,不允许区间&-&).
'L'和 'W'可以一组合使用。如果在日字段上设置&LW&,则表示在本月的最后一个工作日触发(一般指发工资 )&
# 序号(表示每月的第几个周几),例如在周字段上设置&6#3&表示在每月的第三个周六.注意如果指定&#5&,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了)
周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同.
0 0 12 * * ?
每天12点触发
0 15 10 ? * *
每天10点15分触发
0 15 10 * * ?
每天10点15分触发
0 15 10 * * ? *
每天10点15分触发
0 15 10 * * ? 2005
2005年每天10点15分触发
0 * 14 * * ?
每天下午的 2点到2点59分每分触发
0 0/5 14 * * ?
每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ?
每天下午的 2点到2点59分(整点开始,每隔5分触发)每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ?
每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED
3月分每周三下午的 2点10分和2点44分触发
0 15 10 ? * MON-FRI
从周一到周五每天上午的10点15分触发
0 15 10 15 * ?
每月15号上午10点15分触发
0 15 10 L * ?
每月最后一天的10点15分触发
0 15 10 ? * 6L
每月最后一周的星期五的10点15分触发
0 15 10 ? * 6L
从2002年到2005年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3
每月的第三周的星期五开始触发
0 0 12 1/5 * ?
每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ?
每年的11月11号 11点11分触发(光棍节)
经过封装的管理类:
import java.text.ParseE
import org.quartz.CronT
import org.quartz.JobD
import org.quartz.S
import org.quartz.SchedulerE
import org.quartz.SchedulerF
import org.quartz.impl.StdSchedulerF
* 定时任务管理类
public class QuartzManager {
private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
private static String JOB_GROUP_NAME = &EXTJWEB_JOBGROUP_NAME&;
private static String TRIGGER_GROUP_NAME = &EXTJWEB_TRIGGERGROUP_NAME&;
* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName
* @param jobClass
* @param time
时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
public static void addJob(String jobName, String jobClass, String time) {
Scheduler sched = gSchedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));// 任务名,任务组,任务执行类
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
trigger.setCronExpression(time);// 触发器时间设定
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()){
sched.start();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 添加一个定时任务
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
触发器组名
* @param jobClass
* @param time
时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, String jobClass, String time){
Scheduler sched = gSchedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类
CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
trigger.setCronExpression(time);// 触发器时间设定
sched.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
* @param time
public static void modifyJobTime(String jobName, String time) {
Scheduler sched = gSchedulerFactory.getScheduler();
CronTrigger trigger = (CronTrigger) sched.getTrigger(jobName, TRIGGER_GROUP_NAME);
if(trigger == null) {
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME);
Class objJobClass = jobDetail.getJobClass();
String jobClass = objJobClass.getName();
removeJob(jobName);
addJob(jobName, jobClass, time);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 修改一个任务的触发时间
* @param triggerName
* @param triggerGroupName
* @param time
public static void modifyJobTime(String triggerName,
String triggerGroupName, String time) {
Scheduler sched = gSchedulerFactory.getScheduler();
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, triggerGroupName);
if(trigger == null) {
String oldTime = trigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(time)) {
CronTrigger ct = (CronTrigger)
// 修改时间
ct.setCronExpression(time);
// 重启触发器
sched.resumeTrigger(triggerName, triggerGroupName);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
public static void removeJob(String jobName) {
Scheduler sched = gSchedulerFactory.getScheduler();
sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 移除一个任务
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
public static void removeJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName) {
Scheduler sched = gSchedulerFactory.getScheduler();
sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
sched.deleteJob(jobName, jobGroupName);// 删除任务
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 启动所有定时任务
public static void startJobs() {
Scheduler sched = gSchedulerFactory.getScheduler();
sched.start();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
* 关闭所有定时任务
public static void shutdownJobs() {
Scheduler sched = gSchedulerFactory.getScheduler();
if(!sched.isShutdown()) {
sched.shutdown();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
简单实现Schedule的Quartz的例子
 第一步:引包
  要使用Quartz,必须要引入以下这几个包:
  1、log4j-1.2.16
  2、quartz-2.1.7
  3、slf4j-api-1.6.1.jar
  4、slf4j-log4j12-1.6.1.jar
  这些包都在下载的Quartz包里面包含着,因此没有必要为寻找这几个包而头疼。
  第二步:创建要被定执行的任务类
  这一步也很简单,只需要创建一个实现了org.quartz.Job接口的类,并实现这个接口的唯一一个方法execute(JobExecutionContext arg0) throws JobExecutionException即可。如:
import java.text.SimpleDateF
import java.util.D
import org.quartz.J
import org.quartz.JobExecutionC
import org.quartz.JobExecutionE
public class myJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss SSS&);
System.out.println(sdf.format(new Date()));
 第三步:创建任务调度,并执行
import java.text.SimpleDateF
import java.util.D
import org.quartz.CronT
import org.quartz.JobD
import org.quartz.S
import org.quartz.SchedulerF
import org.quartz.impl.StdSchedulerF
public class Test {
public void go() throws Exception {
// 首先,必需要取得一个Scheduler的引用
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
String time=&0 51 11 ? * *&;
// jobs可以在scheduled的sched.start()方法前被调用
// job 1将每隔20秒执行一次
JobDetail job = new JobDetail(&job1&, &group1&, myJob.class);
CronTrigger trigger = new CronTrigger(&trigger1&, &group1&);
trigger.setCronExpression(time);
Date ft = sched.scheduleJob(job, trigger);
SimpleDateFormat sdf = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss SSS&);
System.out.println(
job.getKey() + & 已被安排执行于: & + sdf.format(ft) + &,并且以如下重复规则重复执行: & + trigger.getCronExpression());
// job 2将每2分钟执行一次(在该分钟的第15秒)
job = new JobDetail(&job2&, &group1&,myJob.class);
trigger = new CronTrigger(&trigger2&, &group1&);
trigger.setCronExpression(time);
ft = sched.scheduleJob(job, trigger);
System.out.println(
job.getKey() + & 已被安排执行于: & + sdf.format(ft) + &,并且以如下重复规则重复执行: & + trigger.getCronExpression());
// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job
sched.start();
// 主线程等待一分钟
Thread.sleep(60L * 1000L);
} catch (Exception e) {
// 关闭定时调度,定时器不再工作
sched.shutdown(true);
public static void main(String[] args) throws Exception {
Test test = new Test();
test.go();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:57376次
积分:1335
积分:1335
排名:千里之外
原创:36篇
转载:279篇
(3)(11)(9)(3)(3)(12)(4)(10)(4)(33)(14)(8)(12)(17)(36)(27)(18)(9)(3)(11)(3)(9)(15)(42)java基础(摘自 菜鸟教程网)(8)
Java 日期时间
java.util包提供了Date类来封装当前的日期和时间。 Date类提供两个构造函数来实例化Date对象。
第一个构造函数使用当前日期和时间来初始化对象。
第二个构造函数接收一个参数,该参数是从日起的毫秒数。
Date(long millisec)
Date对象创建以后,可以调用下面的方法。
方法和描述
boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Object clone( )
返回此对象的副本。
int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
int hashCode( )
&返回此对象的哈希码值。
void setTime(long time)
用自日00:00:00 GMT以后time毫秒数设置时间和日期。
String toString( )
转换Date对象为String表示形式,并返回该字符串。
获取当前日期时间
Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间,如下所示:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
尝试一下 >>
以上实例编译运行结果如下:
Mon May 04 09:51:52 CDT 2013
Java使用以下三种方法来比较两个日期:
使用getTime( ) 方法获取两个日期(自日经历的毫秒数值),然后比较这两个值。使用方法before(),after()和equals()。例如,一个月的12号比18号早,则new Date(99, 2, 12).before(new Date (99, 2, 18))返回true。使用compareTo()方法,它是由Comparable接口定义的,Date类实现了这个接口。
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。例如:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat (&E yyyy.MM.dd 'at' hh:mm:ss a zzz&);
System.out.println(&Current Date: & + ft.format(dNow));
尝试一下 >>
以上实例编译运行结果如下:
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
简单的DateFormat格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的ASCII字母被保留为模式字母,定义如下:
July or 07
一个月的日期
&A.M./P.M. (1~12)格式小时
一天中的小时 (0~23)
一年中的日子
一个月中第几周的周几
2 (second Wed. in July)
一年中第几周
一个月中第几周
A.M./P.M. 标记
一天中的小时(1~24)
&A.M./P.M. (0~11)格式小时
Eastern Standard Time
文字定界符
使用printf格式化日期
printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面表格中的一个字母结尾。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用toString()显示日期和时间
String str = String.format(&Current Date/Time : %tc&, date );
System.out.printf(str);
尝试一下 >>
以上实例编译运行结果如下:
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了。因此,可以利用一个格式化字符串指出要被格式化的参数的索引。
索引必须紧跟在%后面,而且必须以$结束。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用toString()显示日期和时间
System.out.printf(&%1$s %2$tB %2$td, %2$tY&,
&Due date:&, date);
尝试一下 >>
以上实例编译运行结果如下:
Due date: February 09, 2004
或者,你可以使用&标志。它表明先前被格式化的参数要被再次使用。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 显示格式化时间
System.out.printf(&%s %tB %&te, %&tY&,
&Due date:&, date);
尝试一下 >>
以上实例编译运行结果如下:
Due date: February 09, 2004
日期和时间转换字符
完整的日期和时间
Mon May 04 09:51:52 CDT 2009
ISO 8601 格式日期
U.S. 格式日期 (月/日/年)
02/09/2004
24小时时间
12小时时间
06:05:19 pm
24小时时间,不包含秒
4位年份(包含前导0)
年份后2位(包含前导0)
年份前2位(包含前导0)
2位月份(包含前导0)
2位日子(包含前导0)
2位日子(不包含前导0)
3位年份(包含前导0)
2位小时(包含前导0), 00 到 23
2位小时(不包含前导0), &0 到 23
2位小时(包含前导0), 01 到 12
2位小时(不包含前导0), &1 到 12
2位分钟(包含前导0)
2位秒数(包含前导0)
3位毫秒(包含前导0)
9位纳秒(包含前导0)
大写上下午标志
小写上下午标志
从GMT的RFC 822数字偏移
00:00:00 GMT的秒数
00:00:00 GMT的毫妙
还有其他有用的日期和时间相关的类。对于更多的细节,你可以参考到Java标准文档。
解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat (&yyyy-MM-dd&);
String input = args.length == 0 ? && : args[0];
System.out.print(input + & Parses as &);
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println(&Unparseable using & + ft);
以上实例编译运行结果如下:
$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。例如,下面的程序会休眠3秒:
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
System.out.println(new Date( ) + &\n&);
Thread.sleep(1000*3);
// 休眠3秒
System.out.println(new Date( ) + &\n&);
} catch (Exception e) {
System.out.println(&Got an exception!&);
尝试一下 >>
以上实例编译运行结果如下:
Thu Sep 17 10:20:30 CST 2015
Thu Sep 17 10:20:33 CST 2015
下面的一个例子表明如何测量时间间隔(以毫秒为单位):
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + &\n&);
Thread.sleep(5*60*10);
System.out.println(new Date( ) + &\n&);
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println(&Difference is : & + diff);
} catch (Exception e) {
System.out.println(&Got an exception!&);
尝试一下 >>
以上实例编译运行结果如下:
Fri Jan 08 09:48:47 CST 2016
Fri Jan 08 09:48:50 CST 2016
Difference is : 3019
Calendar类
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型
Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
Calendar.YEAR
Calendar.MONTH
Calendar.DATE
Calendar.DAY_OF_MONTH
日期,和上面的字段意义完全相同
Calendar.HOUR
12小时制的小时
Calendar.HOUR_OF_DAY
24小时制的小时
Calendar.MINUTE
Calendar.SECOND
Calendar.DAY_OF_WEEK
Calendar类对象信息的设置
Calendar c1 = Calendar.getInstance();
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
其他字段属性set的意义以此类推
Calendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推
Calendar类对象信息的获得
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这些代表公历定义的两个时代。
下面列出GregorianCalendar对象的几个构造方法:
构造函数和说明
GregorianCalendar()
在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
GregorianCalendar(int year, int month, int date)
在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar
GregorianCalendar(int year, int month, int date, int hour, int minute)
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
& 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
GregorianCalendar(Locale aLocale)
在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。
GregorianCalendar(TimeZone zone)
在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
GregorianCalendar(TimeZone zone, Locale aLocale)
&在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。
这里是GregorianCalendar 类提供的一些有用的方法列表:
方法和说明
void add(int field, int amount)
根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
protected void computeFields()
转换UTC毫秒值为时间域值
protected void computeTime()
覆盖Calendar ,转换时间域值为UTC毫秒值
boolean equals(Object obj)
比较此 GregorianCalendar 与指定的 Object。
int get(int field)
获取指定字段的时间值
int getActualMaximum(int field)
返回当前日期,给定字段的最大值
int getActualMinimum(int field)
返回当前日期,给定字段的最小值
int getGreatestMinimum(int field)
&返回此 GregorianCalendar 实例给定日历字段的最高的最小值。
Date getGregorianChange()
获得格里高利历的更改日期。
int getLeastMaximum(int field)
返回此 GregorianCalendar 实例给定日历字段的最低的最大值
int getMaximum(int field)
返回此 GregorianCalendar 实例的给定日历字段的最大值。
Date getTime()
获取日历当前时间。
long getTimeInMillis()
获取用长整型表示的日历的当前时间
TimeZone getTimeZone()
获取时区。
int getMinimum(int field)
返回给定字段的最小值。
int hashCode()
重写hashCode.
boolean isLeapYear(int year)
确定给定的年份是否为闰年。
void roll(int field, boolean up)
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
void set(int field, int value)
用给定的值设置时间字段。
void set(int year, int month, int date)
设置年、月、日的值。
void set(int year, int month, int date, int hour, int minute)
设置年、月、日、小时、分钟的值。
void set(int year, int month, int date, int hour, int minute, int second)
设置年、月、日、小时、分钟、秒的值。
void setGregorianChange(Date date)
设置 GregorianCalendar 的更改日期。
void setTime(Date date)
用给定的日期设置Calendar的当前时间。
void setTimeInMillis(long millis)
用给定的long型毫秒数设置Calendar的当前时间。
void setTimeZone(TimeZone value)
用给定时区值设置当前时区。
String toString()
返回代表日历的字符串。
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {
&Jan&, &Feb&, &Mar&, &Apr&,
&May&, &Jun&, &Jul&, &Aug&,
&Sep&, &Oct&, &Nov&, &Dec&};
// 初始化 Gregorian 日历
// 使用当前时间和日期
// 默认为本地时间和时区
GregorianCalendar gcalendar = new GregorianCalendar();
// 显示当前时间和日期的信息
System.out.print(&Date: &);
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(& & + gcalendar.get(Calendar.DATE) + & &);
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print(&Time: &);
System.out.print(gcalendar.get(Calendar.HOUR) + &:&);
System.out.print(gcalendar.get(Calendar.MINUTE) + &:&);
System.out.println(gcalendar.get(Calendar.SECOND));
// 测试当前年份是否为闰年
if(gcalendar.isLeapYear(year)) {
System.out.println(&当前年份是闰年&);
System.out.println(&当前年份不是闰年&);
尝试一下 >>
以上实例编译运行结果如下:
Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:236次
排名:千里之外
原创:12篇
转载:16篇

我要回帖

更多关于 父亲节图片 的文章

 

随机推荐