为指定日期安排 Java 中的任务
Scheduling a task in Java for a specified date
我很期待学习 java。我制作了这个程序,当当前日期匹配指定日期时,它会执行一些代码,在这种情况下,它会退出 while 循环。
我想知道是否还有其他方法,但现在我会坚持使用此字符串比较。
出于某些原因,If 循环无法正常工作,我使用 System.out.println(date) 监视当前日期,但当它到达所需日期(按格式 HH:MM:SS)时,我会执行操作,字符串不相等并且 while 循环继续,有什么我想念的吗?
编辑:平台 = windows 7
public class Main {
static String DesiredDate;
static String date;
static boolean Programisrunning;
public static void main(String[] args) {
DesiredDate = "17:24:10";
while(Programisrunning = true) {
date = CurrentDate.GetDate();
System.out.println(date);
if(date.equals(DesiredDate)) {
Programisrunning = false;
}
}
System.out.println("Program succesfully terminated");
}
}
//另一个class
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CurrentDate {
public static String GetDate(){
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
return dateFormat.format(date);
}
}
执行者
While 循环解决方案不好,因为 CPU 很忙。使用 executors, specifically ScheduledExecutorService
.
long delay = desiredDate.getTime() - System.currentTimeMillis();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
要安排任务,请使用 ScheduledExecutorService
:
Date desiredDate = // ...
Date now = new Date();
long delay = desiredDate.getTime() - now.getTime();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.schedule(new Runnable(){
@Override
public void run() {
Programisrunning = false;
// + do other things?
}
}, delay, TimeUnit.MILLISECONDS); // run in "delay" millis
为了计算,您应该将基于文本的日期 "hh:mm" 转换为长值,它表示 1.1.1970 (UTC) 的毫秒数。
这个值,例如由System.currentTimeMillis()传递;
SimpleDateFormat
将从给定的格式化人类可读时间 (yyyy hh:mm:ss) 传递日期,长值也可以通过 date.getTime()
;[=13 获取=]
在该背景下,在给定时间使用 class ScheduledExecutorService
到 运行 任务。
您可以只使用计时器 class 来计时:
/**
* Runs a timer for the specified length.
* @param milliseconds the amount of milliseconds to run for.
* @param seconds the amount of seconds to run for.
* @param minutes the amount of minutes to run for.
* @param hours the amount of hours to run for.
*/
public void timerallfeatures(int milliseconds, int seconds, int minutes, int hours){
int Timeinterval = (hours * 60 * 60 * 1000) + (minutes * 60 * 1000) + (seconds * 1000) + milliseconds;
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Your timer is up!");
// Do stuff here
}
}, Timeinterval);
}
或重复计时器:
/**
* Runs a timer for the specified length.
* Timer repeats.
* @param milliseconds the amount of milliseconds to run for.
* @param seconds the amount of seconds to run for.
* @param minutes the amount of minutes to run for.
* @param hours the amount of hours to run for.
*/
public void timerallfeaturesrepeating(int milliseconds, int seconds, int minutes, int hours){
int Timeinterval = hours * minutes * seconds * milliseconds;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
System.out.println("Your timer is up!");
}
}, Timeinterval, Timeinterval);
}
Timer class 还有一个 schedule(TimerTask, Date) 方法来执行 Date 而不是时间长度(以毫秒为单位)
您还可以查看我编写的用于帮助 java io 和计时器函数的库,称为 "Shared Packages",它具有一系列计时器:https://github.com/JD9999/Shared-Packages/tree/master/Timers
我很期待学习 java。我制作了这个程序,当当前日期匹配指定日期时,它会执行一些代码,在这种情况下,它会退出 while 循环。 我想知道是否还有其他方法,但现在我会坚持使用此字符串比较。
出于某些原因,If 循环无法正常工作,我使用 System.out.println(date) 监视当前日期,但当它到达所需日期(按格式 HH:MM:SS)时,我会执行操作,字符串不相等并且 while 循环继续,有什么我想念的吗?
编辑:平台 = windows 7
public class Main {
static String DesiredDate;
static String date;
static boolean Programisrunning;
public static void main(String[] args) {
DesiredDate = "17:24:10";
while(Programisrunning = true) {
date = CurrentDate.GetDate();
System.out.println(date);
if(date.equals(DesiredDate)) {
Programisrunning = false;
}
}
System.out.println("Program succesfully terminated");
}
}
//另一个class
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CurrentDate {
public static String GetDate(){
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
return dateFormat.format(date);
}
}
执行者
While 循环解决方案不好,因为 CPU 很忙。使用 executors, specifically ScheduledExecutorService
.
long delay = desiredDate.getTime() - System.currentTimeMillis();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
要安排任务,请使用 ScheduledExecutorService
:
Date desiredDate = // ...
Date now = new Date();
long delay = desiredDate.getTime() - now.getTime();
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.schedule(new Runnable(){
@Override
public void run() {
Programisrunning = false;
// + do other things?
}
}, delay, TimeUnit.MILLISECONDS); // run in "delay" millis
为了计算,您应该将基于文本的日期 "hh:mm" 转换为长值,它表示 1.1.1970 (UTC) 的毫秒数。
这个值,例如由System.currentTimeMillis()传递;
SimpleDateFormat
将从给定的格式化人类可读时间 (yyyy hh:mm:ss) 传递日期,长值也可以通过 date.getTime()
;[=13 获取=]
在该背景下,在给定时间使用 class ScheduledExecutorService
到 运行 任务。
您可以只使用计时器 class 来计时:
/**
* Runs a timer for the specified length.
* @param milliseconds the amount of milliseconds to run for.
* @param seconds the amount of seconds to run for.
* @param minutes the amount of minutes to run for.
* @param hours the amount of hours to run for.
*/
public void timerallfeatures(int milliseconds, int seconds, int minutes, int hours){
int Timeinterval = (hours * 60 * 60 * 1000) + (minutes * 60 * 1000) + (seconds * 1000) + milliseconds;
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Your timer is up!");
// Do stuff here
}
}, Timeinterval);
}
或重复计时器:
/**
* Runs a timer for the specified length.
* Timer repeats.
* @param milliseconds the amount of milliseconds to run for.
* @param seconds the amount of seconds to run for.
* @param minutes the amount of minutes to run for.
* @param hours the amount of hours to run for.
*/
public void timerallfeaturesrepeating(int milliseconds, int seconds, int minutes, int hours){
int Timeinterval = hours * minutes * seconds * milliseconds;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
System.out.println("Your timer is up!");
}
}, Timeinterval, Timeinterval);
}
Timer class 还有一个 schedule(TimerTask, Date) 方法来执行 Date 而不是时间长度(以毫秒为单位)
您还可以查看我编写的用于帮助 java io 和计时器函数的库,称为 "Shared Packages",它具有一系列计时器:https://github.com/JD9999/Shared-Packages/tree/master/Timers