我的服务器在欧洲/罗马时区运行-这是服务器上的默认 tz-,我需要根据用户的时区安排作业,所以,如果用户,生活在太平洋/檀香山时区,为他所在的地球地区安排了一个每天下午 22:00 触发的 CronTrigger 我找到了这个解决方案:
CronTrigger trigger = newTrigger() .withIdentity("name","group") .withSchedule( cronSchedule("0 0 22 ? * *").inTimeZone(TimeZone.getTimeZone("Pacific/Honolulu")) ) .startNow() .build();
在我的服务器上这项工作从我的"第二天早上 9:00 开始.
除了时区更新之外,还有一些特殊问题需要考虑(即时区更新工具) ?
如果我想为上一份工作定义 .startAt() 和 .endAt(),这样的日期可以吗?使用此过程可能的夏令时是安全的吗?
Calendar calTZStarts = new GregorianCalendar(TimeZone.getTimeZone("Pacific/Honolulu")); calTZStarts.set(2013,Calendar.JANUARY,10); Calendar calTZEnds = new GregorianCalendar(TimeZone.getTimeZone("Pacific/Honolulu")); calTZEnds.set(2013,30); Calendar calStarts = Calendar.getInstance(); calStarts.set(Calendar.YEAR,calTZStarts.get(Calendar.YEAR)); calStarts.set(Calendar.MONTH,calTZStarts.get(Calendar.MONTH)); calStarts.set(Calendar.DAY_OF_MONTH,calTZStarts.get(Calendar.DAY_OF_MONTH)); calStarts.set(Calendar.HOUR_OF_DAY,calTZStarts.get(Calendar.HOUR_OF_DAY)); calStarts.set(Calendar.MINUTE,calTZStarts.get(Calendar.MINUTE)); calStarts.set(Calendar.SECOND,calTZStarts.get(Calendar.SECOND)); calStarts.set(Calendar.MILLISECOND,calTZStarts.get(Calendar.MILLISECOND)); Calendar calEnds = Calendar.getInstance(); calEnds.set(Calendar.YEAR,calTZEnds.get(Calendar.YEAR)); calEnds.set(Calendar.MONTH,calTZEnds.get(Calendar.MONTH)); calEnds.set(Calendar.DAY_OF_MONTH,calTZEnds.get(Calendar.DAY_OF_MONTH)); calEnds.set(Calendar.HOUR_OF_DAY,calTZEnds.get(Calendar.HOUR_OF_DAY)); calEnds.set(Calendar.MINUTE,calTZEnds.get(Calendar.MINUTE)); calEnds.set(Calendar.SECOND,calTZEnds.get(Calendar.SECOND)); calEnds.set(Calendar.MILLISECOND,calTZEnds.get(Calendar.MILLISECOND)); CronTrigger trigger = newTrigger() .withIdentity("name","group") .withSchedule( cronSchedule("0 0 22 ? * *").inTimeZone(TimeZone.getTimeZone("Pacific/Honolulu")) ) .startAt(calStarts.getTime()) .endAt(calEnds.getTime()) .build();
或者我必须简单地设置开始和结束使用:
Calendar calTZStarts = new GregorianCalendar(); calTZStarts.set(2013,10,0); Calendar calTZEnds = new GregorianCalendar(); calTZEnds.set(2013,30,0); CronTrigger trigger = newTrigger() .withIdentity("name","group") .withSchedule( cronSchedule("0 0 22 ? * *").inTimeZone(TimeZone.getTimeZone("Pacific/Honolulu")) ) .startAt(calTZStarts.getTime()) .endAt(calTZEnds.getTime()) .build();
那么工作在太平洋/檀香山"定义的日子里正确开始/结束?
提前感谢您的每一个建议