定时任务Quartz使用大全个人文章

一个Scheduler的生命周期是由它的创作范围,通过SchedulerFactory来调用他的创建和关闭。

创建Scheduler后,就可以使用它

//definethejobandtieittoourHelloJobclassJobDetailjob=newJob(HelloJob.class).withIdentity("myJob","group1")//name"myJob",group"group1".build();//Triggerthejobtorunnow,andthenevery40secondsTriggertrigger=newTrigger().withIdentity("myTrigger","group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();//Tellquartztoschedulethejobusingourtriggersched.scheduleJob(job,trigger);JobsandTriggersJob是一个接口

publicinterfaceJob{publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException;}当一个Jobs被触发执行的时候,会调用execute,在一个Scheduler的worker的线程里面。

JobExecutionContext提供了运行的时候需要的一些变量

JobDetail在Job加到Scheduler的时候,他能包含一些属性用来设置给job的,比如说JobDataMap,他能让我们存储一些状态信息给我们Job

Trigger用来触发执行任务,也包含了JobDataMap,他能告诉我们什么时候执行任务。默认有SimpleTrigger和CronTrigger

如果您希望基于类似日历的日程安排(如每个周五中午或每个月的第10天的10:15)进行触发,那么CronTrigger非常有用。

JobKeyandTriggerKey

groups

//definethejobandtieittoourHelloJobclassJobDetailjob=newJob(HelloJob.class).withIdentity("myJob","group1")//name"myJob",group"group1".build();//Triggerthejobtorunnow,andthenevery40secondsTriggertrigger=newTrigger().withIdentity("myTrigger","group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();//Tellquartztoschedulethejobusingourtriggersched.scheduleJob(job,trigger);publicclassHelloJobimplementsJob{publicHelloJob(){}publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{System.err.println("Hello!HelloJobisexecuting.");}}每次执行的时候,都会在调用execute前创建其实例,执行完成后会删除和垃圾回收。

//definethejobandtieittoourDumbJobclassJobDetailjob=newJob(DumbJob.class).withIdentity("myJob","group1")//name"myJob",group"group1".usingJobData("jobSays","HelloWorld!").usingJobData("myFloatValue",3.141f).build();publicclassDumbJobimplementsJob{publicDumbJob(){}publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{JobKeykey=context.getJobDetail().getKey();JobDataMapdataMap=context.getJobDetail().getJobDataMap();StringjobSays=dataMap.getString("jobSays");floatmyFloatValue=dataMap.getFloat("myFloatValue");System.err.println("Instance"+key+"ofDumbJobsays:"+jobSays+",andvalis:"+myFloatValue);}}JobExecutionContext能够帮我们合并Trigger和JobDetail上的JobDataMap里面的值,Trigger上的key会覆盖JobDetail上的

publicclassDumbJobimplementsJob{publicDumbJob(){}publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{JobKeykey=context.getJobDetail().getKey();JobDataMapdataMap=context.getMergedJobDataMap();//NotethedifferencefromthepreviousexampleStringjobSays=dataMap.getString("jobSays");floatmyFloatValue=dataMap.getFloat("myFloatValue");ArrayListstate=(ArrayList)dataMap.get("myStateData");state.add(newDate());System.err.println("Instance"+key+"ofDumbJobsays:"+jobSays+",andvalis:"+myFloatValue);}}Job实例触发器触发,会加载对应的JobDetail,并且通过配置的Jobfactory来实例化对应的Job

并且尝试在对应的JobFactory上调用与JobDataMap中的键名匹配的setter方法。

@DisallowConcurrentExecution

这个用来加到Job类上面,用来告诉Quartz不要同时执行同一个Job

@PersistJobDataAfterExecution

也是加到Job类上面,告诉Quartz执行完成后(没有出现异常),更新JobDataMap的存储,用来告诉下次执行的时候能够获取当前设置的值。

像Job一样,Trigger也很容易使用,但是确实包含各种自定义选项,在充分利用Quartz之前,您需要了解它们并了解它们。同样,如前所述,您可以选择不同类型的Trigger来满足不同的调度需求。

当我们触发器很多,Quartz线程池的工作线程很少的时候,可能没有足够的资源同事启动所有要触发的触发器,如果没有指定优先级,会使用默认优先级5

优先级配置支持任何整数值正数或者负数

注意:当检测到触发器的作业需要恢复时,其恢复的排定的优先级与原始触发器相同。

publicinterfaceCalendar{publicbooleanisTimeIncluded(longtimeStamp);publiclonggetNextIncludedTime(longtimeStamp);}上述接口都是毫秒,为了方便Quartz还提供了HolidayCalendar来提供整天的排除

使用CronTrigger,您可以指定触发计划,例如“每个星期五中午”,“每个工作日至9:30”,甚至“每个星期一,星期三的上午9:00至10:00之间的每5分钟”和一月的星期五”。

即便如此,与SimpleTrigger一样,CronTrigger具有一个startTime,用于指定计划何时生效;以及一个(可选的)endTime,用于指定计划何时终止。

表达式用于配置CronTrigger的实例。Cron-Expression是实际上由七个子表达式组成的字符串,它们描述了日程表的各个细节。这些子表达式用空格分隔,代表:

各个子表达式可以包含范围和/或列表。

通配符''可以用于表示字段的所有可能值

*代表每一周的每一天

/代表指定值的增量。

:星期几和星期几字段允许使用字符。用于指定“无特定值”。当您需要在两个字段之一中指定某项而不是另一个字段时,这很有用

L:用于月和周,表示最后一个,月表示月的最后一天1月31日,2月28日。用于星期的话表示7或者sat(周六),如果6L表示该月的最后一个最后一个星期五,可以用来指定该月最后一天的偏移量L-3,表示日历月的倒数第三天

W用来指定给定日期的工作日(周一到星期五),15W指的是离每月15日最近的工作日

#用于指定每月的第“n”个XXX工作日。例如,星期几字段中的6#3或FRI#3的值表示每月的第三个星期五。

CronTrigger示例1-用于创建仅每5分钟触发一次的触发器的表达式

00/5***?CronTrigger示例2-创建一个触发器的表达式,该触发器每5分钟触发一次,每分钟后10秒(例如10:00:10am,10:05:10am等)触发。

100/5***?CronTrigger示例3-创建一个触发器的表达式,该触发器在每个星期三和星期五的10:30、11:30、12:30和13:30触发。

03010-13?*WED,FRICronTrigger示例4-创建一个触发器的表达式,该触发器在每月的5号和20号的上午8点到10点之间每半小时触发一次。请注意,触发器不会在上午10:00,仅在8:00、8:30、9:00和9:30触发

00/308-95,20*请注意,某些计划要求太过复杂而无法用一次触发来表达,例如“上午9:00至上午10:00之间每5分钟一次,下午1:00至10:00下午每20分钟一次”。这种情况下的解决方案是简单地创建两个触发器,并注册两个触发器以运行相同的作业。

importstaticorg.quartz.TriggerBuilder.*;importstaticorg.quartz.CronScheduleBuilder.*;importstaticorg.quartz.DateBuilder.*:建立一个触发器,该触发器每天每天从早上8点到下午5点之间每隔一分钟触发一次:trigger=newTrigger().withIdentity("trigger3","group1").withSchedule(cronSchedule("00/28-17**")).forJob("myJob","group1").build();建立触发器,每天10:42am触发trigger=newTrigger().withIdentity("trigger3","group1").withSchedule(dailyAtHourAndMinute(10,42)).forJob(myJobKey).build();或者

trigger=newTrigger().withIdentity("trigger3","group1").withSchedule(cronSchedule("04210**")).forJob(myJobKey).build();构建一个触发器,该触发器将在星期三上午10:42,使用系统默认值以外的TimeZone触发trigger=newTrigger().withIdentity("trigger3","group1").withSchedule(weeklyOnDayAndHourAndMinute(DateBuilder.WEDNESDAY,10,42)).forJob(myJobKey).inTimeZone(TimeZone.getTimeZone("America/Los_Angeles")).build();或者

publicinterfaceJobListener{publicStringgetName();publicvoidjobToBeExecuted(JobExecutionContextcontext);publicvoidjobExecutionVetoed(JobExecutionContextcontext);publicvoidjobWasExecuted(JobExecutionContextcontext,JobExecutionExceptionjobException);}使用自己的监听器要创建侦听器,只需创建一个实现org.quartz.TriggerListener或org.quartz.JobListener接口的对象。然后,在运行时将侦听器注册到调度程序,并且必须给其指定名称(或者说,它们必须通过其getName()方法发布自己的名称)。

侦听器与调度程序的ListenerManager一起注册,该Matcher描述了侦听器要为其接收事件的作业/触发器。

scheduler.getListenerManager().addJobListener(myJobListener,jobKeyEquals(jobKey("myJobName","myJobGroup")));添加对特定组的所有作业感兴趣的JobListenerscheduler.getListenerManager().addJobListener(myJobListener,jobGroupEquals("myJobGroup"));添加对两个特定组的所有作业感兴趣的JobListenerscheduler.getListenerManager().addJobListener(myJobListener,or(jobGroupEquals("myJobGroup"),jobGroupEquals("yourGroup")));添加对所有作业感兴趣的JobListenerscheduler.getListenerManager().addJobListener(myJobListener,allJobs());Quartz的大多数用户都不使用侦听器,但是当应用程序需求创建事件通知的需求时,侦听器非常方便,而Job本身不必显式通知应用程序。

*SchedulerListener*与TriggerListeners和JobListeners非常相似,除了它们在Scheduler自身内接收事件的通知-不一定与特定触发器或作业有关的事件。

publicinterfaceSchedulerListener{publicvoidjobScheduled(Triggertrigger);publicvoidjobUnscheduled(StringtriggerName,StringtriggerGroup);publicvoidtriggerFinalized(Triggertrigger);publicvoidtriggersPaused(StringtriggerName,StringtriggerGroup);publicvoidtriggersResumed(StringtriggerName,StringtriggerGroup);publicvoidjobsPaused(StringjobName,StringjobGroup);publicvoidjobsResumed(StringjobName,StringjobGroup);publicvoidschedulerError(Stringmsg,SchedulerExceptioncause);publicvoidschedulerStarted();publicvoidschedulerInStandbyMode();publicvoidschedulerShutdown();publicvoidschedulingDataCleared();}添加一个SchedulerListenerscheduler.getListenerManager().addSchedulerListener(mySchedListener);删除SchedulerListenerscheduler.getListenerManager().removeSchedulerListener(mySchedListener);9.JobStoreJobStore负责跟踪您提供给调度程序的所有“JobData”:作业,触发器,日历等。为Quartz调度程序实例选择适当的JobStore是重要的一步。

幸运的是,一旦您了解了两者之间的差异,那么选择就非常容易。

要使用RAMJobStore(并假设您正在使用StdSchedulerFactory),只需将类名称org.quartz.simpl.RAMJobStore指定为用于配置石英的JobStore类属性:

org.quartz.jobStore.class=org.quartz.simpl.RAMJobStoreJDBCJobStore

JDBCJobStore也被恰当地命名-它通过JDBC将其所有数据保存在数据库中。因此,它的配置要比RAMJobStore复杂一些,并且速度也没有那么快。

JDBCJobStore几乎可以与任何数据库一起使用,它已被Oracle,PostgreSQL,MySQL,MSSQLServer,HSQLDB和DB2广泛使用。要使用JDBCJobStore,必须首先创建一组数据库表供Quartz使用。您可以在Quartz发行版的docs/dbTables目录中找到表创建SQL脚本。如果没有针对您的数据库类型的脚本,只需查看现有脚本之一,然后以数据库所需的任何方式对其进行修改。需要注意的一件事是,在这些脚本中,所有表都以前缀“QRTZ_”开头(例如表“QRTZ_TRIGGERS”和“QRTZ_JOB_DETAIL”)。只要您告知JDBCJobStore前缀是什么(在Quartz属性中),该前缀实际上就可以是您想要的任何前缀。使用不同的前缀对于创建多个表集,多个调度程序实例可能很有用,

创建表之后,在配置和启动JDBCJobStore之前,您需要做出另一个重要决定。您需要确定您的应用程序需要哪种事物来管理。如果您不需要将调度命令(例如添加和删除触发器)与其他事务绑定,则可以让Quartz通过将JobStoreTX用作JobStore来管理事务(这是最常见的选择)。

如果您需要Quartz与其他事务一起工作(即在J2EE应用程序服务器中),则应使用JobStoreCMT-在这种情况下,Quartz将允许应用程序服务器容器管理事务。

最后一个难题是设置一个数据源,JDBCJobStore可以从该数据源获得与您的数据库的连接。

数据源是使用几种不同方法之一在Quartz属性中定义的。

要使用JDBCJobStore(并假设您使用的是StdSchedulerFactory),首先需要将Quartz配置的JobStore类属性设置为org.quartz.impl.jdbcjobstore.JobStoreTX或org.quartz.impl.jdbcjobstore.JobStoreCMT根据以上几段中的说明进行的选择。

配置Quartz以使用JobStoreTx

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX接下来,您需要选择一个DriverDelegate供JobStore使用。DriverDelegate负责完成特定数据库可能需要的任何JDBC工作。

StdJDBCDelegate是使用“原始”JDBC代码(和SQL语句)完成其工作的委托。如果没有专门为您的数据库创建的另一个委托,请尝试使用此委托-我们仅对使用StdJDBCDelegate与(发现最多!)发现问题的数据库进行了特定于数据库的委托。其他代表可以在“org.quartz.impl.jdbcjobstore”包或其子包中找到。其他代表包括DB2v6Delegate(用于DB2版本6和更早版本),HSQLDBDelegate(用于HSQLDB),MSSQLDelegate(用于MicrosoftSQLServer),PostgreSQLDelegate(用于PostgreSQL),WeblogicDelegate(用于使用由Weblogic制造的JDBC驱动程序),

选择委托后,将其类名称设置为JDBCJobStore使用的委托。

配置JDBCJobStore以使用DriverDelegate

org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate接下来,您需要通知JobStore您正在使用的表前缀(上面已讨论过)。

使用表前缀配置JDBCJobStore

org.quartz.jobStore.tablePrefix=QRTZ_最后,您需要设置JobStore应该使用哪个数据源。还必须在Quartz属性中定义命名的DataSource。在这种情况下,我们指定Quartz应该使用数据源名称“myDS”(在配置属性的其他位置定义)。

使用要使用的数据源的名称配置JDBCJobStore

org.quartz.jobStore.dataSource=myDS如果您的调度程序很忙(即几乎总是执行与线程池大小相同的作业数),那么您可能应该将DataSource中的连接数设置为线程池大小的+2。可以将“org.quartz.jobStore.useProperty”配置参数设置为“true”(默认为false),以指示JDBCJobStoreJobDataMaps中的所有值均为字符串,因此可以存储为名称-值对,而不是而不是将更复杂的对象以其序列化形式存储在BLOB列中。从长远来看,这样做更加安全,因为可以避免将非String类序列化为BLOB时出现的类版本控制问题。

TerracottaJobStore提供了一种无需使用数据库即可进行缩放和增强功能的方法。这意味着您的数据库可以免于Quartz的负载,而可以为应用程序的其余部分保存所有资源。

TerracottaJobStore可以集群化或非集群化运行,并且在两种情况下都可以为您的作业数据提供一种存储介质,该存储介质在应用程序重新启动之间是持久的,因为数据存储在Terracotta服务器中。它的性能比通过JDBCJobStore使用数据库要好得多(大约好一个数量级),但比RAMJobStore慢得多。

要使用TerracottaJobStore(并假设您使用的是StdSchedulerFactory),只需指定类名称org.quartz.jobStore.class=org.terracotta.quartz.TerracottaJobStore作为用于配置Quartz的JobStore类属性,然后添加一行配置以指定Terracotta服务器的位置:

Quartz的体系结构是模块化的,因此要使其运行,需要将多个组件“绑定”在一起。幸运的是,存在一些帮助实现此目标的助手。

Quartz进行工作之前需要配置的主要组件是:

该*线程池*提供了一组线程供Quartz在执行Jobs时使用。池中的线程越多,可以并行运行的作业数越多。但是,太多线程可能会使您的系统瘫痪。

其他用户发现他们需要10、15、50甚至100个线程-因为它们具有成千上万个具有各种计划的触发器-最终平均有10到100个试图在任何给定时刻执行的作业。

为调度程序池找到合适的大小完全取决于您使用调度程序的目的。没有真正的规则,除了使线程数尽可能小(为了节省计算机资源)外-还要确保有足够的空间按时启动作业。

如果在调度程序配置的misfire阈值期间没有可用的线程,这甚至可能导致线程不触发。

在org.quartz.spi包中定义了ThreadPool接口,您可以按照自己喜欢的任何方式创建ThreadPool实现。Quartz附带了一个简单(但非常令人满意)的线程池,名为org.quartz.simpl.SimpleThreadPool。此ThreadPool只是在其池中维护一组固定的线程-永不增长,永不收缩。但是它非常健壮,并且经过了很好的测试-因为几乎所有使用Quartz的人都使用该池。

这里值得一提的是,所有JobStore都实现了org.quartz.spi.JobStore接口-如果捆绑的JobStore之一不符合您的需求,那么您可以自己制作。

最后,您需要创建Scheduler实例。需要给Scheduler本身一个名称,告诉它的RMI设置,并传递JobStore和ThreadPool的实例。RMI设置包括调度程序是否应将其自身创建为RMI的服务器对象(使其可用于远程连接),要使用的主机和端口等。StdSchedulerFactory(下面讨论)还可以产生实际上是代理的Scheduler实例(RMI存根)到在远程进程中创建的调度程序。

StdSchedulerFactory是org.quartz.SchedulerFactory接口的实现。它使用一组属性(java.util.Properties)创建和初始化QuartzScheduler。

这些属性通常存储在文件中并从文件中加载,但是也可以由程序创建并直接交给工厂。只需在工厂上调用getScheduler()即可生成调度程序,对其进行初始化(及其ThreadPool,JobStore和DataSources),并将句柄返回其公共接口。

Quartz发行版的“docs/config”目录中有一些示例配置(包括属性说明)。您可以在Quartz文档的“Reference”部分下的“Configuration”手册中找到完整的文档。

DirectSchedulerFactory是另一个SchedulerFactory实现。对于希望以更具编程性的方式创建其Scheduler实例的用户来说,这很有用。通常不建议使用它,原因如下:

Quartz使用SLF4J框架来满足其所有日志记录需求。为了“调整”日志记录设置(例如输出的数量以及输出的输出位置),您需要了解SLF4J框架,这不在本文档的讨论范围之内。

如果要捕获有关触发器触发和作业执行的其他信息,则可能对启用org.quartz.plugins.history.LoggingJobHistoryPlugin或org.quartz.plugins.history.LoggingTriggerHistoryPlugin感兴趣。

群集当前可与JDBC-Jobstore(JobStoreTX或JobStoreCMT)和TerracottaJobStore一起使用。功能包括负载平衡和作业故障转移(如果JobDetail的“请求恢复”标志设置为true)。

使用JobStoreTX或JobStoreCMT进行群集通过将org.quartz.jobStore.isClustered属性设置为“true”来启用群集。

集群中的每个实例都应使用quartz.properties文件的相同副本。例外情况是使用相同的属性文件,但允许以下例外:不同的线程池大小和org.quartz.scheduler.instanceId属性的不同值。

集群中的每个节点必须具有唯一的instanceId,可以通过将“AUTO”放置为该属性的值来轻松完成(不需要其他属性文件)。

切勿针对其他实例正在运行的同一组表启动非集群实例。您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为

每次触发时,只有一个节点将触发该作业。我的意思是,如果作业具有重复的触发器,告诉它每10秒触发一次,则在12:00:00恰好一个节点将运行该作业,而在12:00:10恰好一个节点将运行作业等等。不一定每次都在同一个节点上-哪个节点运行它或多或少是随机的。对于繁忙的调度程序(大量触发器),负载平衡机制几乎是随机的,但偏向于对于非繁忙的调度程序(例如,一个或两个触发器)仅处于活动状态的同一节点。

您可能还需要考虑如何设置Terracotta服务器的含义,特别是打开诸如持久性等功能以及为HA运行一系列Terracotta服务器的配置选项。

TerracottaJobStore企业版提供高级QuartzWhere功能,可将作业智能地定向到适当的群集节点。

JobStoreCMT允许在较大的JTA事务中执行Quartz调度操作。

通过将org.quartz.scheduler.wrapJobExecutionInUserTransaction属性设置为true,作业还可以在JTA事务(UserTransaction)中执行。

设置此选项后,JTA事务将在Job的execute方法被调用之前开始begin(),而execute调用终止后将进行commit()。这适用于所有作业。

如果要为每个作业指示JTA事务是否应该包装其执行,则应在作业类上使用@ExecuteInJTATransaction批注。

除了Quartz在JTA事务中自动包装Job执行之外,在使用JobStoreCMT时,您在Scheduler接口上进行的调用也会参与事务。只需确保已启动事务,然后再调用调度程序上的方法即可。您可以通过使用UserTransaction来直接执行此操作,也可以将使用调度程序的代码放在使用容器管理的事务的SessionBean中。

Quartz提供了一个用于插入附加功能的接口(org.quartz.spi.SchedulerPlugin)。

可以在*org.quartz.plugins*包中找到Quartz附带的提供各种实用程序功能的插件。它们提供了一些功能,例如在调度程序启动时自动调度作业,记录作业和触发事件的历史记录,并确保在JVM退出时调度程序完全关闭。

触发触发器时,将通过在Scheduler上配置的JobFactory实例化与之关联的Job。默认的JobFactory仅在作业类上调用newInstance()。

您可能需要创建自己的JobFactory实现,以完成诸如使应用程序的IoC或DI容器生成/初始化作业实例之类的事情。

Quartz还提供了许多实用程序作业,您可以在应用程序中使用它们来完成诸如发送电子邮件和调用EJB之类的事情。这些开箱即用的作业可以在*org.quartz.jobs*包中找到。

THE END
1.min是什么意思分钟 分钟(min),又称分,是时间的量度单位,是小时的六十分之一,表示为 1/60 小时(h)。 换算关系 · 1 小时 (h) = 60 分钟 (min) · 1 分钟 (min) = 1/60 小时 (h) · 1 分钟 (min) = 60 秒 (s) 历史起源 最初,“分钟”一词源自拉丁语 minuta,意为“一小部分”。在古罗马时代, https://localsite.baidu.com/article-detail.html?articleId=20471644&ucid=PjRvPHDYPjm&categoryLv1=%E6%95%99%E8%82%B2%E5%9F%B9%E8%AE%AD&ch=54&srcid=10004
2.武汉教育云“时”和“小时”有什么不同?怎样使用“时”和“小时”? 首先应该明确的是,〔小〕时并非国际时间单位。在1984年国务院发布的《关于我国统一法定计量单位的命令》中,把秒作为时间的基本单位,把非国际单位制的时间单位天(日)、〔小〕时、分作为辅助单位。 https://www.wuhaneduyun.cn/index.php?r=space/person/blog/view&sid=F259F9AA4A377692E04010AC73D40970&id=1617392141
3.JAVA日期时间小结.meset(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值 field 的定义在 Calendar 中 set(int year, int month, int day, int hour, int minute, int second) 但没有set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,inthttps://www.iteye.com/blog/neeleon-935392
4.一个半小时两种说法?湍觅网小时是时间的一种计量单位,通常将一天分为24小时,每小时60分钟。所以,一个半小时就是1.5小时。将1.5小时转换成分钟,简单地将小时数乘以60即可。 1.5小时 × 60分钟/小时 = 90分钟 时间是我们生活中非常重要的一个概念,我们常常将时间用来计算和安排各种活动。然而,时间的单位有很多种,除了小时和分钟,还有秒、天https://www.tuanmituan.com/c278b508e0adf626.html
5.妇产科护理(2020年春季学期)超星尔雅学习通网课答案4、【单选题】4一健康女婴,足月顺产后五天,因出现阴道血性分泌物被父母送来医院。该现象最可能是 A、假月经 B、.阴道直肠瘘 C、尿道阴道瘘 D、会阴损伤 E、血友病 5、【单选题】5;13岁女生,因月经初潮来门诊咨询。该女生自述对月经初潮来临很紧张,害怕身体出现疾病,近期情绪很难控制,心神不定,烦躁不安,常http://changchun.ehqc.cn/show/0_49.html
6.months是什么意思中文翻译6. 反义词:小时、分钟 示例:请尽快完成任务,我们只剩下几个小时的时间了。 我只等了五分钟,就看到他们出现在门口。 7. 反义词:秒、瞬间 示例:这场比赛的胜负在一瞬间就决定了。 他们的爱情就像是一瞬间的火花,燃烧得很快。 8. 反义词:永久、永恒 https://www.68jy.net/zixun/mszhishi/188240.html
7.Java进阶篇JavaScript日期和时间详解currentdate.setdate在编程中,日期和时间通常是指特定时刻或一段时间的表示。日期通常包括年、月、日,而时间通常包括小时、分钟、秒以及毫秒。这些信息可以用来记录事件发生的时间、计算时间间隔、显示日期和时间等。 JavaScript提供了内置的Date对象,用于处理日期和时间相关的操作。Date对象允许你获取当前日期和时间、设置特定日期和时间、执https://blog.csdn.net/qq_21484461/article/details/133817838
8.谈谈golangduration的转换方法Golang在开发过程中,我们经常需要进行 duration 的转换,例如将毫秒转换为 duration,或者将 duration 转换为分钟等等。Golang 提供了内置的时间单位用来进行相互转换,这些时间单位包括纳秒、微秒、毫秒、秒、分钟、小时等。我们可以使用这些时间单位和 duration 进行转换。下面分别介绍这些时间单位与 duration 的转换方法。 https://www.php.cn/faq/524897.html
9.不花钱玩超频十分钟教你跨入5GHz时代CPUCPUCPU评测除此之外,Intel即将发布的Core 2 Duo X6800也已经被我国台湾选手成功超频至5.266GHz,SuperPI 1M挺进10秒大关!心动不如行动,赶快动手吧! 从软件中可以清楚的看到CPU、主板和内存三者之间的频率关系 以我们最经常提到的CPU超频为例,套用前面所给出的超频定义,通常所说的CPU超频是提高CPU工作频率而采用的一种方法。但https://cpu.zol.com.cn/31/314908_all.html
10.SMPTE时间码的格式为,小时:分钟:秒:毫秒SMPTE时间码的格式为,小时:分钟:秒:毫秒A.正确B.错误的答案是什么.用刷刷题APP,拍照搜索答疑.刷刷题(shuashuati.com)是专业的大学职业搜题找答案,刷题练习的工具.一键将文档转化为在线题库手机刷题,以提高学习效率,是学习的生产力工具https://www.shuashuati.com/ti/7e4ada2c8cbb45028a788ecc3de2e94a.html?fm=bd37aec83328ac1535958cd0b0d6691333
11.java毫秒计算时分秒mob649e816880fe的技术博客在Java中,时间通常以毫秒为单位进行计算。这个毫秒单位可以用来表示相对时间,也可以用来表示绝对时间。在本文中,我们将讨论如何使用Java来计算给定毫秒数的小时、分钟和秒数。 时间单位 在Java中,时间可以通过使用不同的时间单位来表示。以下是Java中常用的时间单位: https://blog.51cto.com/u_16175516/8327893
12.2005年南开大学专升本入学模拟题含答案(计算机基础)三套5. 大家知道,60秒钟为1分,60分钟为1小时。秒、分、小时的计时采用的是 进制。6. 32KB的内存空间能存储 个汉字的内码。7. 打印机分辨率的单位为DPI,其含义是 。8. 操作系统是用户与 的接口,即用户通过操作系统来使用计算机。9. 计算机指令是由 和 组成的。10. 常用的微机总线有 、和等。11. 控制器用https://www.51test.net/show/8546037.html
13.小学二年级数学上册《时分秒》知识点汇总+练习题2412093、时针走1大格是(1)小时;分针走1大格是(5)分钟,走1小格是( 1)分钟;秒针走1大格是(5)秒钟,走1小格是(1)秒钟。 4、时针走1大格,分针正好走(1)圈,分针走1圈是(60)分,也就是(1)小时。时针走1圈,分针要走(12)圈。 5、分针https://mp.weixin.qq.com/s?__biz=MzA4NTI5NjQ1OA==&mid=2650168628&idx=5&sn=db2bbc364a8b3bfc764881c8302d69ce&chksm=86e716c6fc0e75fe516b9d72b7f86d7866c8eeb8382ad0e154e53e77cba8449ee3f7b809ae38&scene=27
14.topor日志topor的个人空间隐藏的 Bug 也许只是在等待时机让你的系统崩溃。这是什么原因呢?聪明的你肯定已经想到,测试代码是用来保证功能代码的质量的,但测试代码的质量如何,我们不得而知。我们需要知道,我们辛苦编写的测试代码到底覆盖了多少功能代码,这就是我写这篇文章的出发点,我将介绍一种测试代码覆盖率的工具 - EMMA。http://www.51testing.com/html/62/115462-type-blog.html
15.Ks24小时秒单业务平台(24小时秒单业务网2020年销量第一,24小时1、一天的秒数是一个关键的时间单位转换问题简单来说,一天共有86,400,000毫秒,这是通过将一天划分为24小时,每小时3600秒,每秒1000毫秒来计算得出的尽管国际单位制提供了ks千秒Ms百万秒和Gs十亿秒等词头,但在日常生活中,人们更倾向于使用60进制的分钟小时和24小时制来表达时间;二sec的定义 当铯133原子位于海平面http://agcorr.hdlgy.com/post/6559.html
16.Ks24小时秒单业务平台低价(24小时秒单业务网2020年销量第一,24尽管国际单位制词头也可以用来扩大时间的范围,例如ks千秒Ms百万秒和Gs十亿秒,但在日常生活中,人们更习惯于使用60进制的秒单位,通过与分1分钟=60秒时1小时=60分钟相组合来表达更长的时间此外,24小时制的日也是我们常用的时间扩展方式,以方便理解和交流因此,秒这个。 尽管这些高精度的词头也能用来表示较大时间量,http://wap.cqtcdc.cn/post/14466.html
17.Linux运行有时间限制的命令—timeout命令腾讯云开发者社区timeout是用来控制程序运行的时间,运行指定的命令。如果在指定时间后仍在运行,则杀死该进程。使用timeout命令可以让程序在指定的时间内仍然运行则强制退出。 2、timeout命令常用格式 代码语言:javascript 复制 [root@RedHat_test~]# timeout[OPTION]DURATIONCOMMAND[ARG]s:秒(默认)m:分钟h:小时d:天 https://cloud.tencent.com/developer/article/1589813
18.家庭自制82种酱料,令你食欲大增用橄榄油炒香。用小火炒成褐色。加入牛肉炒至同样颜色,加入去皮、去籽的番茄一起煸炒待番茄炒烂后加入红葡萄酒和家乐番茄沙司炒匀。400ml清水中加入家乐牛肉清汤粉制成牛肉清汤,盐,香料,从小火,炖煮约半个小时,最后用盐。牛肉清汤粉,胡椒粉调味,取出香料即可。https://www.360doc.cn/article/7306526_1106891648.html
19.日语动词总结8.以小时为单位计算时间的数法: 一時間(ちかん)、二時間(にかん)、三時間(さんかん)、四時間(よかん)七時間(しち或ななかん)、九時間(くかん)、十時間(ゅぅかん)何(なんかん)。 9.以分钟为单位计算时间的数法: 一分間(っんかん)、二分間(にふんかん)、三分間(さんんかん)、四https://mip.wenshubang.com/xuexizongjie/456285.html
20.小学三年级数学教案(14篇)③学生汇报,教师引导:秒针走了一圈用了多少秒?在秒针走一圈的同时,分针走了几小格?也就是几分钟?你发现了什么?(1分=60秒) ④你发现时、分、秒这三个单位间有什么关系?(1时=60分,1分=60秒) (3)认识秒表和秒的计时方法。 ①课件出示。 这是秒表。一般在体育运动中用来记录以秒为单位的时间。 https://xiaoxue.ruiwen.com/jiaoan/285582.html
21.秒表用来记录以什么为单位的时间从古至今人们都是利用什么来记录在体育运动中秒表用来记录以秒为单位的时间。时间单位秒(second)是国际单位制中时间的基本单位,符号是s。有时也会借用英文缩写标示为sec。按照新定义,一天将达24小时56分24秒。秒当铯-133原子位于海平面处于非扰动基态时两个超精细能级间跃迁对应的辐射频率ΔνCs以Hz(即等于s-1)为单位表达时选 https://cai.verywind.com/xx/vdrywymdiirinnyrcdm.htm
22.小学数学知识点3、时针走1大格是1小时;分针走1大格是5分钟,走1小格是1分钟;秒针走1大格是5秒钟,走1小格是1秒钟。 4、分针走1小格,秒针正好走1圈,秒针走1圈是60秒,也就是1分钟。 5、时针从一个数走到下一个数是1小时。分针从一个数走到下一个数是5分钟。秒针从一个数走到下一个数是5秒钟。 https://m.oh100.com/shuxue/4195205.html