java中每个月第一天执行一次任务的定时器如何实现? 20

现在遇到一个问题,原有的短信发送平台,每天早上8点,会给当天生日的员工发送生日祝福。现在客户提新的需求,要求每个月1号给当月入党的党员发送廉政警言。我在原有的基础上做尽可... 现在遇到一个问题,原有的短信发送平台,每天早上8点,会给当天生日的员工发送生日祝福。现在客户提新的需求,要求每个月1号给当月入党的党员发送廉政警言。我在原有的基础上做尽可能小的修改,所以就还是用java的Timer来实现。
Timer的scheduleAtFixedRate方法,最后一个参数是long型的,对于每个月的第一天,这个long是不固定的,好像直接实现不了。
请大家指教!
展开
 我来答
pingia
2010-05-28 · TA获得超过568个赞
知道小有建树答主
回答量:697
采纳率:100%
帮助的人:764万
展开全部
Date d = new Date();//获取服务器的时间。。。
Calendar c= Canlendar.getInstance();
c.setTime(d);

if(c.get(Calendar.DAY_OF_MONTH) == 1) //当前是1号
{
//拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
// //写下你的判断代码
}
else //当前不是1号 则从下个月1号开始执行定期任务
{

c.set(Calendar.MONTH,c.get(Calendar.MONTH)+ 1);//设置为下月
c.set(Calendar.DAY_OF_MONTH,1);//设置为下月的1号

Timer timer =new Timer();

timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
//每天都来判断一下 如果当前日期是1号
////则拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
//run函数里写下你的判断代码
}},c.getTime(),24* 3600*1000); //每天执行一次run()方法...
}
百度网友581c622
2015-05-22 · TA获得超过4379个赞
知道大有可为答主
回答量:1826
采纳率:0%
帮助的人:1351万
展开全部

据我所知,java典型的有三种定时器。一一简介如下:

  1. java定时器。java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Timer类来注册调用,先创建一个类 RingTask 继承 java.util.TimerTask,实现run方法。
    缺点:时间的设定不够灵活,服务器开启不会触发定时器。

  2. Spring定时器。spring定时器是在spring框架中应用较成熟的一种方式,spring将定时任务的调用部分提到了配置文件当中,使定时器的触发条件变得更加灵活,spring定时器的实现,仍然需要 继承 java.util.TimerTask,实现run方法。需要配置。

    缺点:对于指定了具体的年月日时分秒而执行的任务还是不能解决。

  3. Quartz定时器。Quartz是基于Spring框架之上的更加强大的定时器,它不仅可以轻松的实现前面两种定时器的功能,还实现了非常繁复的时间触发执行的任务,Quartz有两种方式来调度定时任务,一是使用Spring提供的 MethodInvokingJobDetailFactoryBean 代理类,Quartz通过该代理类直接调度任务类的某个函数;二是任务类继承QuartzJobBean类或者实现org.quartz.Job接口,Quartz通过该父类或者接口进行调度。需要配置。

    按照你的需求,可以使用Quartz定时器,触发时间设置如下:

    0 0 0 1 * ? 每月1号上午00点00分触发

其他由你自己去探索实现。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pujia12345
2010-05-28 · TA获得超过3680个赞
知道大有可为答主
回答量:3456
采纳率:0%
帮助的人:2962万
展开全部
既然Timer你都做了,那还有什么难的?
。。。
Calendar c=Calendar.getInstance();
int day=c.get(Calendar.DAY_OF_MONTH);
if(day==1) {
//执行
}
。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
披着狼皮的羊汤
2010-05-28 · TA获得超过246个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:106万
展开全部
用定时器每隔一段时间就判断一下系统时间,看是否是每个月的1号,不就行了,是就提醒
不过我感觉java.swing.Timer定时器能更好点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w670610468
2013-01-15
知道答主
回答量:28
采纳率:0%
帮助的人:5.8万
展开全部
LZ做到了每天8点准时发短信,说明LZ也可以知道每个月1号准时发短信;因为LZ很聪明。
原有的生日短信使用的是员工生日和今天进行匹配,那么LZ就目前需求得出了这样一个答案:在1号发短信规则的基础上,使用当前月跟党员入党日期进行匹配,配上了就发短信给他!LZ好样的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式